{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c3087360",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io\n",
    "# Define the coRNNCell\n",
    "class coRNNCell(nn.Module):\n",
    "    def __init__(self, n_inp, n_hid, dt, gamma, epsilon):\n",
    "        super(coRNNCell, self).__init__()\n",
    "        self.dt = dt\n",
    "        self.gamma = gamma\n",
    "        self.epsilon = epsilon\n",
    "        self.i2h = nn.Linear(n_inp + n_hid + n_hid, n_hid)\n",
    "\n",
    "    def forward(self, x, hy, hz):\n",
    "        hz = hz + self.dt * (torch.tanh(self.i2h(torch.cat((x, hz, hy), 1)))\n",
    "                             - self.gamma * hy - self.epsilon * hz)\n",
    "        hy = hy + self.dt * hz\n",
    "\n",
    "        return hy, hz\n",
    "\n",
    "# Define the coRNN model\n",
    "class coRNN(nn.Module):\n",
    "    def __init__(self, n_inp, n_hid, n_out, dt, gamma, epsilon):\n",
    "        super(coRNN, self).__init__()\n",
    "        self.n_hid = n_hid\n",
    "        self.cell = coRNNCell(n_inp, n_hid, dt, gamma, epsilon)\n",
    "        self.readout = nn.Linear(n_hid, n_out)\n",
    "\n",
    "    def forward(self, x):\n",
    "        hy = torch.zeros(x.size(1), self.n_hid)\n",
    "        hz = torch.zeros(x.size(1), self.n_hid)\n",
    "\n",
    "        for t in range(x.size(0)):\n",
    "            hy, hz = self.cell(x[t], hy, hz)\n",
    "        output = self.readout(hy)\n",
    "\n",
    "        return output\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "5d6cfa8b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 256)\n",
      "(1, 100)\n",
      "(256, 100)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Load the .mat file\n",
    "mat_data = scipy.io.loadmat('burg.mat')\n",
    "\n",
    "# Access the variables stored in the .mat file\n",
    "# The variable names in the .mat file become keys in the loaded dictionary\n",
    "x = mat_data['x']\n",
    "t = mat_data['t']\n",
    "u = mat_data['u1']\n",
    "\n",
    "# Use the loaded variables as needed\n",
    "print(x.shape)\n",
    "print(t.shape)\n",
    "print(u.shape)\n",
    "\n",
    "X, T = np.meshgrid(x, t)\n",
    "# Define custom color levels\n",
    "c_levels = np.linspace(np.min(u), np.max(u), 100)\n",
    "\n",
    "# Plot the contour\n",
    "plt.figure(figsize=(15, 5))\n",
    "plt.contourf(T, X, u.T, levels=c_levels, cmap='coolwarm')\n",
    "plt.xlabel('t')\n",
    "plt.ylabel('x')\n",
    "plt.title('Burgers')\n",
    "plt.colorbar()  # Add a colorbar for the contour levels\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "08861d5f",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/data/localhome/tkapoor/.local/lib/python3.8/site-packages/torch/nn/modules/loss.py:520: UserWarning: Using a target size (torch.Size([1, 79, 256])) that is different to the input size (torch.Size([79, 256])). This will likely lead to incorrect results due to broadcasting. Please ensure they have the same size.\n",
      "  return F.mse_loss(input, target, reduction=self.reduction)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 10/20000, Loss: 0.41685393\n",
      "Epoch: 20/20000, Loss: 0.40157637\n",
      "Epoch: 30/20000, Loss: 0.38687059\n",
      "Epoch: 40/20000, Loss: 0.37270209\n",
      "Epoch: 50/20000, Loss: 0.35906750\n",
      "Epoch: 60/20000, Loss: 0.34595200\n",
      "Epoch: 70/20000, Loss: 0.33333120\n",
      "Epoch: 80/20000, Loss: 0.32117948\n",
      "Epoch: 90/20000, Loss: 0.30947345\n",
      "Epoch: 100/20000, Loss: 0.29819226\n",
      "Epoch: 110/20000, Loss: 0.28731743\n",
      "Epoch: 120/20000, Loss: 0.27683240\n",
      "Epoch: 130/20000, Loss: 0.26672217\n",
      "Epoch: 140/20000, Loss: 0.25697288\n",
      "Epoch: 150/20000, Loss: 0.24757172\n",
      "Epoch: 160/20000, Loss: 0.23850667\n",
      "Epoch: 170/20000, Loss: 0.22976637\n",
      "Epoch: 180/20000, Loss: 0.22133999\n",
      "Epoch: 190/20000, Loss: 0.21321721\n",
      "Epoch: 200/20000, Loss: 0.20538823\n",
      "Epoch: 210/20000, Loss: 0.19784352\n",
      "Epoch: 220/20000, Loss: 0.19057399\n",
      "Epoch: 230/20000, Loss: 0.18357085\n",
      "Epoch: 240/20000, Loss: 0.17682560\n",
      "Epoch: 250/20000, Loss: 0.17033006\n",
      "Epoch: 260/20000, Loss: 0.16407622\n",
      "Epoch: 270/20000, Loss: 0.15805647\n",
      "Epoch: 280/20000, Loss: 0.15226330\n",
      "Epoch: 290/20000, Loss: 0.14668950\n",
      "Epoch: 300/20000, Loss: 0.14132802\n",
      "Epoch: 310/20000, Loss: 0.13617207\n",
      "Epoch: 320/20000, Loss: 0.13121498\n",
      "Epoch: 330/20000, Loss: 0.12645033\n",
      "Epoch: 340/20000, Loss: 0.12187184\n",
      "Epoch: 350/20000, Loss: 0.11747342\n",
      "Epoch: 360/20000, Loss: 0.11324914\n",
      "Epoch: 370/20000, Loss: 0.10919321\n",
      "Epoch: 380/20000, Loss: 0.10530001\n",
      "Epoch: 390/20000, Loss: 0.10156410\n",
      "Epoch: 400/20000, Loss: 0.09798016\n",
      "Epoch: 410/20000, Loss: 0.09454297\n",
      "Epoch: 420/20000, Loss: 0.09124754\n",
      "Epoch: 430/20000, Loss: 0.08808894\n",
      "Epoch: 440/20000, Loss: 0.08506240\n",
      "Epoch: 450/20000, Loss: 0.08216329\n",
      "Epoch: 460/20000, Loss: 0.07938711\n",
      "Epoch: 470/20000, Loss: 0.07672943\n",
      "Epoch: 480/20000, Loss: 0.07418603\n",
      "Epoch: 490/20000, Loss: 0.07175272\n",
      "Epoch: 500/20000, Loss: 0.06942551\n",
      "Epoch: 510/20000, Loss: 0.06720047\n",
      "Epoch: 520/20000, Loss: 0.06507380\n",
      "Epoch: 530/20000, Loss: 0.06304180\n",
      "Epoch: 540/20000, Loss: 0.06110089\n",
      "Epoch: 550/20000, Loss: 0.05924761\n",
      "Epoch: 560/20000, Loss: 0.05747857\n",
      "Epoch: 570/20000, Loss: 0.05579050\n",
      "Epoch: 580/20000, Loss: 0.05418023\n",
      "Epoch: 590/20000, Loss: 0.05264470\n",
      "Epoch: 600/20000, Loss: 0.05118092\n",
      "Epoch: 610/20000, Loss: 0.04978601\n",
      "Epoch: 620/20000, Loss: 0.04845720\n",
      "Epoch: 630/20000, Loss: 0.04719177\n",
      "Epoch: 640/20000, Loss: 0.04598711\n",
      "Epoch: 650/20000, Loss: 0.04484071\n",
      "Epoch: 660/20000, Loss: 0.04375011\n",
      "Epoch: 670/20000, Loss: 0.04271298\n",
      "Epoch: 680/20000, Loss: 0.04172701\n",
      "Epoch: 690/20000, Loss: 0.04079003\n",
      "Epoch: 700/20000, Loss: 0.03989991\n",
      "Epoch: 710/20000, Loss: 0.03905460\n",
      "Epoch: 720/20000, Loss: 0.03825213\n",
      "Epoch: 730/20000, Loss: 0.03749060\n",
      "Epoch: 740/20000, Loss: 0.03676818\n",
      "Epoch: 750/20000, Loss: 0.03608310\n",
      "Epoch: 760/20000, Loss: 0.03543367\n",
      "Epoch: 770/20000, Loss: 0.03481826\n",
      "Epoch: 780/20000, Loss: 0.03423528\n",
      "Epoch: 790/20000, Loss: 0.03368324\n",
      "Epoch: 800/20000, Loss: 0.03316068\n",
      "Epoch: 810/20000, Loss: 0.03266621\n",
      "Epoch: 820/20000, Loss: 0.03219848\n",
      "Epoch: 830/20000, Loss: 0.03175622\n",
      "Epoch: 840/20000, Loss: 0.03133819\n",
      "Epoch: 850/20000, Loss: 0.03094320\n",
      "Epoch: 860/20000, Loss: 0.03057013\n",
      "Epoch: 870/20000, Loss: 0.03021789\n",
      "Epoch: 880/20000, Loss: 0.02988544\n",
      "Epoch: 890/20000, Loss: 0.02957179\n",
      "Epoch: 900/20000, Loss: 0.02927598\n",
      "Epoch: 910/20000, Loss: 0.02899711\n",
      "Epoch: 920/20000, Loss: 0.02873429\n",
      "Epoch: 930/20000, Loss: 0.02848671\n",
      "Epoch: 940/20000, Loss: 0.02825357\n",
      "Epoch: 950/20000, Loss: 0.02803410\n",
      "Epoch: 960/20000, Loss: 0.02782759\n",
      "Epoch: 970/20000, Loss: 0.02763335\n",
      "Epoch: 980/20000, Loss: 0.02745071\n",
      "Epoch: 990/20000, Loss: 0.02727904\n",
      "Epoch: 1000/20000, Loss: 0.02711776\n",
      "Epoch: 1010/20000, Loss: 0.02696628\n",
      "Epoch: 1020/20000, Loss: 0.02682408\n",
      "Epoch: 1030/20000, Loss: 0.02669063\n",
      "Epoch: 1040/20000, Loss: 0.02656545\n",
      "Epoch: 1050/20000, Loss: 0.02644805\n",
      "Epoch: 1060/20000, Loss: 0.02633802\n",
      "Epoch: 1070/20000, Loss: 0.02623492\n",
      "Epoch: 1080/20000, Loss: 0.02613835\n",
      "Epoch: 1090/20000, Loss: 0.02604794\n",
      "Epoch: 1100/20000, Loss: 0.02596333\n",
      "Epoch: 1110/20000, Loss: 0.02588417\n",
      "Epoch: 1120/20000, Loss: 0.02581015\n",
      "Epoch: 1130/20000, Loss: 0.02574095\n",
      "Epoch: 1140/20000, Loss: 0.02567629\n",
      "Epoch: 1150/20000, Loss: 0.02561590\n",
      "Epoch: 1160/20000, Loss: 0.02555950\n",
      "Epoch: 1170/20000, Loss: 0.02550687\n",
      "Epoch: 1180/20000, Loss: 0.02545776\n",
      "Epoch: 1190/20000, Loss: 0.02541196\n",
      "Epoch: 1200/20000, Loss: 0.02536925\n",
      "Epoch: 1210/20000, Loss: 0.02532946\n",
      "Epoch: 1220/20000, Loss: 0.02529238\n",
      "Epoch: 1230/20000, Loss: 0.02525783\n",
      "Epoch: 1240/20000, Loss: 0.02522566\n",
      "Epoch: 1250/20000, Loss: 0.02519571\n",
      "Epoch: 1260/20000, Loss: 0.02516782\n",
      "Epoch: 1270/20000, Loss: 0.02514184\n",
      "Epoch: 1280/20000, Loss: 0.02511762\n",
      "Epoch: 1290/20000, Loss: 0.02509501\n",
      "Epoch: 1300/20000, Loss: 0.02507380\n",
      "Epoch: 1310/20000, Loss: 0.02505359\n",
      "Epoch: 1320/20000, Loss: 0.02503214\n",
      "Epoch: 1330/20000, Loss: 0.02491937\n",
      "Epoch: 1340/20000, Loss: 0.02468975\n",
      "Epoch: 1350/20000, Loss: 0.02429332\n",
      "Epoch: 1360/20000, Loss: 0.02396245\n",
      "Epoch: 1370/20000, Loss: 0.02369624\n",
      "Epoch: 1380/20000, Loss: 0.02346035\n",
      "Epoch: 1390/20000, Loss: 0.02323751\n",
      "Epoch: 1400/20000, Loss: 0.02301017\n",
      "Epoch: 1410/20000, Loss: 0.02278839\n",
      "Epoch: 1420/20000, Loss: 0.02255920\n",
      "Epoch: 1430/20000, Loss: 0.02232300\n",
      "Epoch: 1440/20000, Loss: 0.02210242\n",
      "Epoch: 1450/20000, Loss: 0.02189947\n",
      "Epoch: 1460/20000, Loss: 0.02170986\n",
      "Epoch: 1470/20000, Loss: 0.02152992\n",
      "Epoch: 1480/20000, Loss: 0.02135732\n",
      "Epoch: 1490/20000, Loss: 0.02119054\n",
      "Epoch: 1500/20000, Loss: 0.02102854\n",
      "Epoch: 1510/20000, Loss: 0.02087054\n",
      "Epoch: 1520/20000, Loss: 0.02071595\n",
      "Epoch: 1530/20000, Loss: 0.02056430\n",
      "Epoch: 1540/20000, Loss: 0.02041518\n",
      "Epoch: 1550/20000, Loss: 0.02026823\n",
      "Epoch: 1560/20000, Loss: 0.02012318\n",
      "Epoch: 1570/20000, Loss: 0.01997975\n",
      "Epoch: 1580/20000, Loss: 0.01983773\n",
      "Epoch: 1590/20000, Loss: 0.01969694\n",
      "Epoch: 1600/20000, Loss: 0.01955723\n",
      "Epoch: 1610/20000, Loss: 0.01941848\n",
      "Epoch: 1620/20000, Loss: 0.01928059\n",
      "Epoch: 1630/20000, Loss: 0.01914349\n",
      "Epoch: 1640/20000, Loss: 0.01900711\n",
      "Epoch: 1650/20000, Loss: 0.01887140\n",
      "Epoch: 1660/20000, Loss: 0.01873634\n",
      "Epoch: 1670/20000, Loss: 0.01860191\n",
      "Epoch: 1680/20000, Loss: 0.01846808\n",
      "Epoch: 1690/20000, Loss: 0.01833485\n",
      "Epoch: 1700/20000, Loss: 0.01820220\n",
      "Epoch: 1710/20000, Loss: 0.01807013\n",
      "Epoch: 1720/20000, Loss: 0.01793867\n",
      "Epoch: 1730/20000, Loss: 0.01780779\n",
      "Epoch: 1740/20000, Loss: 0.01767754\n",
      "Epoch: 1750/20000, Loss: 0.01754791\n",
      "Epoch: 1760/20000, Loss: 0.01741893\n",
      "Epoch: 1770/20000, Loss: 0.01729061\n",
      "Epoch: 1780/20000, Loss: 0.01716296\n",
      "Epoch: 1790/20000, Loss: 0.01703600\n",
      "Epoch: 1800/20000, Loss: 0.01690974\n",
      "Epoch: 1810/20000, Loss: 0.01678419\n",
      "Epoch: 1820/20000, Loss: 0.01665935\n",
      "Epoch: 1830/20000, Loss: 0.01653524\n",
      "Epoch: 1840/20000, Loss: 0.01641187\n",
      "Epoch: 1850/20000, Loss: 0.01628923\n",
      "Epoch: 1860/20000, Loss: 0.01616734\n",
      "Epoch: 1870/20000, Loss: 0.01604620\n",
      "Epoch: 1880/20000, Loss: 0.01592582\n",
      "Epoch: 1890/20000, Loss: 0.01580621\n",
      "Epoch: 1900/20000, Loss: 0.01568739\n",
      "Epoch: 1910/20000, Loss: 0.01556935\n",
      "Epoch: 1920/20000, Loss: 0.01545210\n",
      "Epoch: 1930/20000, Loss: 0.01533567\n",
      "Epoch: 1940/20000, Loss: 0.01522003\n",
      "Epoch: 1950/20000, Loss: 0.01510521\n",
      "Epoch: 1960/20000, Loss: 0.01499121\n",
      "Epoch: 1970/20000, Loss: 0.01487802\n",
      "Epoch: 1980/20000, Loss: 0.01476566\n",
      "Epoch: 1990/20000, Loss: 0.01465411\n",
      "Epoch: 2000/20000, Loss: 0.01454337\n",
      "Epoch: 2010/20000, Loss: 0.01443344\n",
      "Epoch: 2020/20000, Loss: 0.01432432\n",
      "Epoch: 2030/20000, Loss: 0.01421599\n",
      "Epoch: 2040/20000, Loss: 0.01410847\n",
      "Epoch: 2050/20000, Loss: 0.01400173\n",
      "Epoch: 2060/20000, Loss: 0.01389577\n",
      "Epoch: 2070/20000, Loss: 0.01379059\n",
      "Epoch: 2080/20000, Loss: 0.01368619\n",
      "Epoch: 2090/20000, Loss: 0.01358256\n",
      "Epoch: 2100/20000, Loss: 0.01347970\n",
      "Epoch: 2110/20000, Loss: 0.01337762\n",
      "Epoch: 2120/20000, Loss: 0.01327630\n",
      "Epoch: 2130/20000, Loss: 0.01317576\n",
      "Epoch: 2140/20000, Loss: 0.01307599\n",
      "Epoch: 2150/20000, Loss: 0.01297699\n",
      "Epoch: 2160/20000, Loss: 0.01287876\n",
      "Epoch: 2170/20000, Loss: 0.01278131\n",
      "Epoch: 2180/20000, Loss: 0.01268464\n",
      "Epoch: 2190/20000, Loss: 0.01258874\n",
      "Epoch: 2200/20000, Loss: 0.01249363\n",
      "Epoch: 2210/20000, Loss: 0.01239928\n",
      "Epoch: 2220/20000, Loss: 0.01230571\n",
      "Epoch: 2230/20000, Loss: 0.01221291\n",
      "Epoch: 2240/20000, Loss: 0.01212087\n",
      "Epoch: 2250/20000, Loss: 0.01202960\n",
      "Epoch: 2260/20000, Loss: 0.01193909\n",
      "Epoch: 2270/20000, Loss: 0.01184934\n",
      "Epoch: 2280/20000, Loss: 0.01176033\n",
      "Epoch: 2290/20000, Loss: 0.01167207\n",
      "Epoch: 2300/20000, Loss: 0.01158456\n",
      "Epoch: 2310/20000, Loss: 0.01149777\n",
      "Epoch: 2320/20000, Loss: 0.01141172\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 2330/20000, Loss: 0.01132639\n",
      "Epoch: 2340/20000, Loss: 0.01124177\n",
      "Epoch: 2350/20000, Loss: 0.01115786\n",
      "Epoch: 2360/20000, Loss: 0.01107466\n",
      "Epoch: 2370/20000, Loss: 0.01099216\n",
      "Epoch: 2380/20000, Loss: 0.01091034\n",
      "Epoch: 2390/20000, Loss: 0.01082921\n",
      "Epoch: 2400/20000, Loss: 0.01074875\n",
      "Epoch: 2410/20000, Loss: 0.01066897\n",
      "Epoch: 2420/20000, Loss: 0.01058984\n",
      "Epoch: 2430/20000, Loss: 0.01051136\n",
      "Epoch: 2440/20000, Loss: 0.01043352\n",
      "Epoch: 2450/20000, Loss: 0.01035631\n",
      "Epoch: 2460/20000, Loss: 0.01027969\n",
      "Epoch: 2470/20000, Loss: 0.01020364\n",
      "Epoch: 2480/20000, Loss: 0.01012791\n",
      "Epoch: 2490/20000, Loss: 0.01002155\n",
      "Epoch: 2500/20000, Loss: 0.00980889\n",
      "Epoch: 2510/20000, Loss: 0.00969999\n",
      "Epoch: 2520/20000, Loss: 0.00960709\n",
      "Epoch: 2530/20000, Loss: 0.00951768\n",
      "Epoch: 2540/20000, Loss: 0.00935060\n",
      "Epoch: 2550/20000, Loss: 0.00918079\n",
      "Epoch: 2560/20000, Loss: 0.00906890\n",
      "Epoch: 2570/20000, Loss: 0.00896663\n",
      "Epoch: 2580/20000, Loss: 0.00886819\n",
      "Epoch: 2590/20000, Loss: 0.00877194\n",
      "Epoch: 2600/20000, Loss: 0.00867750\n",
      "Epoch: 2610/20000, Loss: 0.00858469\n",
      "Epoch: 2620/20000, Loss: 0.00849341\n",
      "Epoch: 2630/20000, Loss: 0.00840355\n",
      "Epoch: 2640/20000, Loss: 0.00831460\n",
      "Epoch: 2650/20000, Loss: 0.00814700\n",
      "Epoch: 2660/20000, Loss: 0.00800072\n",
      "Epoch: 2670/20000, Loss: 0.00789336\n",
      "Epoch: 2680/20000, Loss: 0.00779427\n",
      "Epoch: 2690/20000, Loss: 0.00769763\n",
      "Epoch: 2700/20000, Loss: 0.00760270\n",
      "Epoch: 2710/20000, Loss: 0.00750932\n",
      "Epoch: 2720/20000, Loss: 0.00741740\n",
      "Epoch: 2730/20000, Loss: 0.00732692\n",
      "Epoch: 2740/20000, Loss: 0.00723787\n",
      "Epoch: 2750/20000, Loss: 0.00715027\n",
      "Epoch: 2760/20000, Loss: 0.00706409\n",
      "Epoch: 2770/20000, Loss: 0.00697927\n",
      "Epoch: 2780/20000, Loss: 0.00689384\n",
      "Epoch: 2790/20000, Loss: 0.00672811\n",
      "Epoch: 2800/20000, Loss: 0.00661003\n",
      "Epoch: 2810/20000, Loss: 0.00651586\n",
      "Epoch: 2820/20000, Loss: 0.00638959\n",
      "Epoch: 2830/20000, Loss: 0.00625624\n",
      "Epoch: 2840/20000, Loss: 0.00615392\n",
      "Epoch: 2850/20000, Loss: 0.00605782\n",
      "Epoch: 2860/20000, Loss: 0.00596461\n",
      "Epoch: 2870/20000, Loss: 0.00587385\n",
      "Epoch: 2880/20000, Loss: 0.00578543\n",
      "Epoch: 2890/20000, Loss: 0.00569742\n",
      "Epoch: 2900/20000, Loss: 0.00557741\n",
      "Epoch: 2910/20000, Loss: 0.00547631\n",
      "Epoch: 2920/20000, Loss: 0.00538604\n",
      "Epoch: 2930/20000, Loss: 0.00529805\n",
      "Epoch: 2940/20000, Loss: 0.00521194\n",
      "Epoch: 2950/20000, Loss: 0.00512754\n",
      "Epoch: 2960/20000, Loss: 0.00504462\n",
      "Epoch: 2970/20000, Loss: 0.00496308\n",
      "Epoch: 2980/20000, Loss: 0.00488278\n",
      "Epoch: 2990/20000, Loss: 0.00480317\n",
      "Epoch: 3000/20000, Loss: 0.00470726\n",
      "Epoch: 3010/20000, Loss: 0.00460895\n",
      "Epoch: 3020/20000, Loss: 0.00452325\n",
      "Epoch: 3030/20000, Loss: 0.00443276\n",
      "Epoch: 3040/20000, Loss: 0.00434571\n",
      "Epoch: 3050/20000, Loss: 0.00426273\n",
      "Epoch: 3060/20000, Loss: 0.00418158\n",
      "Epoch: 3070/20000, Loss: 0.00410212\n",
      "Epoch: 3080/20000, Loss: 0.00402438\n",
      "Epoch: 3090/20000, Loss: 0.00394842\n",
      "Epoch: 3100/20000, Loss: 0.00387429\n",
      "Epoch: 3110/20000, Loss: 0.00380202\n",
      "Epoch: 3120/20000, Loss: 0.00373162\n",
      "Epoch: 3130/20000, Loss: 0.00366311\n",
      "Epoch: 3140/20000, Loss: 0.00359647\n",
      "Epoch: 3150/20000, Loss: 0.00353167\n",
      "Epoch: 3160/20000, Loss: 0.00346870\n",
      "Epoch: 3170/20000, Loss: 0.00340751\n",
      "Epoch: 3180/20000, Loss: 0.00334805\n",
      "Epoch: 3190/20000, Loss: 0.00329026\n",
      "Epoch: 3200/20000, Loss: 0.00323410\n",
      "Epoch: 3210/20000, Loss: 0.00317949\n",
      "Epoch: 3220/20000, Loss: 0.00312638\n",
      "Epoch: 3230/20000, Loss: 0.00307471\n",
      "Epoch: 3240/20000, Loss: 0.00302441\n",
      "Epoch: 3250/20000, Loss: 0.00297543\n",
      "Epoch: 3260/20000, Loss: 0.00292770\n",
      "Epoch: 3270/20000, Loss: 0.00288118\n",
      "Epoch: 3280/20000, Loss: 0.00283581\n",
      "Epoch: 3290/20000, Loss: 0.00279155\n",
      "Epoch: 3300/20000, Loss: 0.00274836\n",
      "Epoch: 3310/20000, Loss: 0.00270620\n",
      "Epoch: 3320/20000, Loss: 0.00266504\n",
      "Epoch: 3330/20000, Loss: 0.00262485\n",
      "Epoch: 3340/20000, Loss: 0.00258559\n",
      "Epoch: 3350/20000, Loss: 0.00254724\n",
      "Epoch: 3360/20000, Loss: 0.00250977\n",
      "Epoch: 3370/20000, Loss: 0.00247316\n",
      "Epoch: 3380/20000, Loss: 0.00243737\n",
      "Epoch: 3390/20000, Loss: 0.00240238\n",
      "Epoch: 3400/20000, Loss: 0.00236816\n",
      "Epoch: 3410/20000, Loss: 0.00233469\n",
      "Epoch: 3420/20000, Loss: 0.00230193\n",
      "Epoch: 3430/20000, Loss: 0.00226987\n",
      "Epoch: 3440/20000, Loss: 0.00223847\n",
      "Epoch: 3450/20000, Loss: 0.00220771\n",
      "Epoch: 3460/20000, Loss: 0.00217757\n",
      "Epoch: 3470/20000, Loss: 0.00214802\n",
      "Epoch: 3480/20000, Loss: 0.00211905\n",
      "Epoch: 3490/20000, Loss: 0.00209063\n",
      "Epoch: 3500/20000, Loss: 0.00206275\n",
      "Epoch: 3510/20000, Loss: 0.00203539\n",
      "Epoch: 3520/20000, Loss: 0.00200855\n",
      "Epoch: 3530/20000, Loss: 0.00198221\n",
      "Epoch: 3540/20000, Loss: 0.00195637\n",
      "Epoch: 3550/20000, Loss: 0.00193102\n",
      "Epoch: 3560/20000, Loss: 0.00190614\n",
      "Epoch: 3570/20000, Loss: 0.00188174\n",
      "Epoch: 3580/20000, Loss: 0.00185779\n",
      "Epoch: 3590/20000, Loss: 0.00183431\n",
      "Epoch: 3600/20000, Loss: 0.00181127\n",
      "Epoch: 3610/20000, Loss: 0.00178867\n",
      "Epoch: 3620/20000, Loss: 0.00176649\n",
      "Epoch: 3630/20000, Loss: 0.00174474\n",
      "Epoch: 3640/20000, Loss: 0.00172340\n",
      "Epoch: 3650/20000, Loss: 0.00170246\n",
      "Epoch: 3660/20000, Loss: 0.00168191\n",
      "Epoch: 3670/20000, Loss: 0.00166174\n",
      "Epoch: 3680/20000, Loss: 0.00164195\n",
      "Epoch: 3690/20000, Loss: 0.00162252\n",
      "Epoch: 3700/20000, Loss: 0.00160345\n",
      "Epoch: 3710/20000, Loss: 0.00158473\n",
      "Epoch: 3720/20000, Loss: 0.00156634\n",
      "Epoch: 3730/20000, Loss: 0.00154828\n",
      "Epoch: 3740/20000, Loss: 0.00153055\n",
      "Epoch: 3750/20000, Loss: 0.00151313\n",
      "Epoch: 3760/20000, Loss: 0.00149602\n",
      "Epoch: 3770/20000, Loss: 0.00147920\n",
      "Epoch: 3780/20000, Loss: 0.00146268\n",
      "Epoch: 3790/20000, Loss: 0.00144644\n",
      "Epoch: 3800/20000, Loss: 0.00143047\n",
      "Epoch: 3810/20000, Loss: 0.00141478\n",
      "Epoch: 3820/20000, Loss: 0.00139935\n",
      "Epoch: 3830/20000, Loss: 0.00138418\n",
      "Epoch: 3840/20000, Loss: 0.00136926\n",
      "Epoch: 3850/20000, Loss: 0.00135459\n",
      "Epoch: 3860/20000, Loss: 0.00134015\n",
      "Epoch: 3870/20000, Loss: 0.00132595\n",
      "Epoch: 3880/20000, Loss: 0.00131198\n",
      "Epoch: 3890/20000, Loss: 0.00129823\n",
      "Epoch: 3900/20000, Loss: 0.00128469\n",
      "Epoch: 3910/20000, Loss: 0.00127137\n",
      "Epoch: 3920/20000, Loss: 0.00125826\n",
      "Epoch: 3930/20000, Loss: 0.00124535\n",
      "Epoch: 3940/20000, Loss: 0.00123264\n",
      "Epoch: 3950/20000, Loss: 0.00122012\n",
      "Epoch: 3960/20000, Loss: 0.00120779\n",
      "Epoch: 3970/20000, Loss: 0.00119564\n",
      "Epoch: 3980/20000, Loss: 0.00118368\n",
      "Epoch: 3990/20000, Loss: 0.00117189\n",
      "Epoch: 4000/20000, Loss: 0.00116028\n",
      "Epoch: 4010/20000, Loss: 0.00114883\n",
      "Epoch: 4020/20000, Loss: 0.00113756\n",
      "Epoch: 4030/20000, Loss: 0.00112644\n",
      "Epoch: 4040/20000, Loss: 0.00111548\n",
      "Epoch: 4050/20000, Loss: 0.00110467\n",
      "Epoch: 4060/20000, Loss: 0.00109402\n",
      "Epoch: 4070/20000, Loss: 0.00108351\n",
      "Epoch: 4080/20000, Loss: 0.00107315\n",
      "Epoch: 4090/20000, Loss: 0.00106294\n",
      "Epoch: 4100/20000, Loss: 0.00105286\n",
      "Epoch: 4110/20000, Loss: 0.00104291\n",
      "Epoch: 4120/20000, Loss: 0.00103310\n",
      "Epoch: 4130/20000, Loss: 0.00102342\n",
      "Epoch: 4140/20000, Loss: 0.00101387\n",
      "Epoch: 4150/20000, Loss: 0.00100444\n",
      "Epoch: 4160/20000, Loss: 0.00099513\n",
      "Epoch: 4170/20000, Loss: 0.00098595\n",
      "Epoch: 4180/20000, Loss: 0.00097688\n",
      "Epoch: 4190/20000, Loss: 0.00096792\n",
      "Epoch: 4200/20000, Loss: 0.00095908\n",
      "Epoch: 4210/20000, Loss: 0.00095035\n",
      "Epoch: 4220/20000, Loss: 0.00094173\n",
      "Epoch: 4230/20000, Loss: 0.00093321\n",
      "Epoch: 4240/20000, Loss: 0.00092480\n",
      "Epoch: 4250/20000, Loss: 0.00091649\n",
      "Epoch: 4260/20000, Loss: 0.00090827\n",
      "Epoch: 4270/20000, Loss: 0.00090016\n",
      "Epoch: 4280/20000, Loss: 0.00089214\n",
      "Epoch: 4290/20000, Loss: 0.00088421\n",
      "Epoch: 4300/20000, Loss: 0.00087638\n",
      "Epoch: 4310/20000, Loss: 0.00086864\n",
      "Epoch: 4320/20000, Loss: 0.00086098\n",
      "Epoch: 4330/20000, Loss: 0.00085342\n",
      "Epoch: 4340/20000, Loss: 0.00084593\n",
      "Epoch: 4350/20000, Loss: 0.00083854\n",
      "Epoch: 4360/20000, Loss: 0.00083122\n",
      "Epoch: 4370/20000, Loss: 0.00082398\n",
      "Epoch: 4380/20000, Loss: 0.00081682\n",
      "Epoch: 4390/20000, Loss: 0.00080974\n",
      "Epoch: 4400/20000, Loss: 0.00080274\n",
      "Epoch: 4410/20000, Loss: 0.00079581\n",
      "Epoch: 4420/20000, Loss: 0.00078895\n",
      "Epoch: 4430/20000, Loss: 0.00078217\n",
      "Epoch: 4440/20000, Loss: 0.00077545\n",
      "Epoch: 4450/20000, Loss: 0.00076881\n",
      "Epoch: 4460/20000, Loss: 0.00076223\n",
      "Epoch: 4470/20000, Loss: 0.00075572\n",
      "Epoch: 4480/20000, Loss: 0.00074928\n",
      "Epoch: 4490/20000, Loss: 0.00074290\n",
      "Epoch: 4500/20000, Loss: 0.00073658\n",
      "Epoch: 4510/20000, Loss: 0.00073033\n",
      "Epoch: 4520/20000, Loss: 0.00072414\n",
      "Epoch: 4530/20000, Loss: 0.00071800\n",
      "Epoch: 4540/20000, Loss: 0.00071193\n",
      "Epoch: 4550/20000, Loss: 0.00070592\n",
      "Epoch: 4560/20000, Loss: 0.00069996\n",
      "Epoch: 4570/20000, Loss: 0.00069406\n",
      "Epoch: 4580/20000, Loss: 0.00068821\n",
      "Epoch: 4590/20000, Loss: 0.00068242\n",
      "Epoch: 4600/20000, Loss: 0.00067669\n",
      "Epoch: 4610/20000, Loss: 0.00067100\n",
      "Epoch: 4620/20000, Loss: 0.00066537\n",
      "Epoch: 4630/20000, Loss: 0.00065979\n",
      "Epoch: 4640/20000, Loss: 0.00065426\n",
      "Epoch: 4650/20000, Loss: 0.00064878\n",
      "Epoch: 4660/20000, Loss: 0.00064335\n",
      "Epoch: 4670/20000, Loss: 0.00063797\n",
      "Epoch: 4680/20000, Loss: 0.00063264\n",
      "Epoch: 4690/20000, Loss: 0.00062735\n",
      "Epoch: 4700/20000, Loss: 0.00062211\n",
      "Epoch: 4710/20000, Loss: 0.00061691\n",
      "Epoch: 4720/20000, Loss: 0.00061176\n",
      "Epoch: 4730/20000, Loss: 0.00060666\n",
      "Epoch: 4740/20000, Loss: 0.00060160\n",
      "Epoch: 4750/20000, Loss: 0.00059658\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 4760/20000, Loss: 0.00059160\n",
      "Epoch: 4770/20000, Loss: 0.00058667\n",
      "Epoch: 4780/20000, Loss: 0.00058178\n",
      "Epoch: 4790/20000, Loss: 0.00057693\n",
      "Epoch: 4800/20000, Loss: 0.00057212\n",
      "Epoch: 4810/20000, Loss: 0.00056735\n",
      "Epoch: 4820/20000, Loss: 0.00056262\n",
      "Epoch: 4830/20000, Loss: 0.00055793\n",
      "Epoch: 4840/20000, Loss: 0.00055327\n",
      "Epoch: 4850/20000, Loss: 0.00054866\n",
      "Epoch: 4860/20000, Loss: 0.00054408\n",
      "Epoch: 4870/20000, Loss: 0.00053954\n",
      "Epoch: 4880/20000, Loss: 0.00053504\n",
      "Epoch: 4890/20000, Loss: 0.00053057\n",
      "Epoch: 4900/20000, Loss: 0.00052614\n",
      "Epoch: 4910/20000, Loss: 0.00052175\n",
      "Epoch: 4920/20000, Loss: 0.00051739\n",
      "Epoch: 4930/20000, Loss: 0.00051306\n",
      "Epoch: 4940/20000, Loss: 0.00050877\n",
      "Epoch: 4950/20000, Loss: 0.00050452\n",
      "Epoch: 4960/20000, Loss: 0.00050030\n",
      "Epoch: 4970/20000, Loss: 0.00049611\n",
      "Epoch: 4980/20000, Loss: 0.00049195\n",
      "Epoch: 4990/20000, Loss: 0.00048783\n",
      "Epoch: 5000/20000, Loss: 0.00048374\n",
      "Epoch: 5010/20000, Loss: 0.00047968\n",
      "Epoch: 5020/20000, Loss: 0.00047565\n",
      "Epoch: 5030/20000, Loss: 0.00047165\n",
      "Epoch: 5040/20000, Loss: 0.00046769\n",
      "Epoch: 5050/20000, Loss: 0.00046375\n",
      "Epoch: 5060/20000, Loss: 0.00045985\n",
      "Epoch: 5070/20000, Loss: 0.00045598\n",
      "Epoch: 5080/20000, Loss: 0.00045213\n",
      "Epoch: 5090/20000, Loss: 0.00044832\n",
      "Epoch: 5100/20000, Loss: 0.00044453\n",
      "Epoch: 5110/20000, Loss: 0.00044078\n",
      "Epoch: 5120/20000, Loss: 0.00043705\n",
      "Epoch: 5130/20000, Loss: 0.00043335\n",
      "Epoch: 5140/20000, Loss: 0.00042968\n",
      "Epoch: 5150/20000, Loss: 0.00042604\n",
      "Epoch: 5160/20000, Loss: 0.00042243\n",
      "Epoch: 5170/20000, Loss: 0.00041884\n",
      "Epoch: 5180/20000, Loss: 0.00041528\n",
      "Epoch: 5190/20000, Loss: 0.00041175\n",
      "Epoch: 5200/20000, Loss: 0.00040825\n",
      "Epoch: 5210/20000, Loss: 0.00040477\n",
      "Epoch: 5220/20000, Loss: 0.00040132\n",
      "Epoch: 5230/20000, Loss: 0.00039789\n",
      "Epoch: 5240/20000, Loss: 0.00039449\n",
      "Epoch: 5250/20000, Loss: 0.00039112\n",
      "Epoch: 5260/20000, Loss: 0.00038777\n",
      "Epoch: 5270/20000, Loss: 0.00038445\n",
      "Epoch: 5280/20000, Loss: 0.00038115\n",
      "Epoch: 5290/20000, Loss: 0.00037788\n",
      "Epoch: 5300/20000, Loss: 0.00037464\n",
      "Epoch: 5310/20000, Loss: 0.00037141\n",
      "Epoch: 5320/20000, Loss: 0.00036822\n",
      "Epoch: 5330/20000, Loss: 0.00036504\n",
      "Epoch: 5340/20000, Loss: 0.00036189\n",
      "Epoch: 5350/20000, Loss: 0.00035877\n",
      "Epoch: 5360/20000, Loss: 0.00035567\n",
      "Epoch: 5370/20000, Loss: 0.00035259\n",
      "Epoch: 5380/20000, Loss: 0.00034954\n",
      "Epoch: 5390/20000, Loss: 0.00034650\n",
      "Epoch: 5400/20000, Loss: 0.00034350\n",
      "Epoch: 5410/20000, Loss: 0.00034051\n",
      "Epoch: 5420/20000, Loss: 0.00033755\n",
      "Epoch: 5430/20000, Loss: 0.00033461\n",
      "Epoch: 5440/20000, Loss: 0.00033170\n",
      "Epoch: 5450/20000, Loss: 0.00032880\n",
      "Epoch: 5460/20000, Loss: 0.00032593\n",
      "Epoch: 5470/20000, Loss: 0.00032308\n",
      "Epoch: 5480/20000, Loss: 0.00032025\n",
      "Epoch: 5490/20000, Loss: 0.00031745\n",
      "Epoch: 5500/20000, Loss: 0.00031466\n",
      "Epoch: 5510/20000, Loss: 0.00031190\n",
      "Epoch: 5520/20000, Loss: 0.00030916\n",
      "Epoch: 5530/20000, Loss: 0.00030644\n",
      "Epoch: 5540/20000, Loss: 0.00030374\n",
      "Epoch: 5550/20000, Loss: 0.00030106\n",
      "Epoch: 5560/20000, Loss: 0.00029840\n",
      "Epoch: 5570/20000, Loss: 0.00029577\n",
      "Epoch: 5580/20000, Loss: 0.00029315\n",
      "Epoch: 5590/20000, Loss: 0.00029056\n",
      "Epoch: 5600/20000, Loss: 0.00028798\n",
      "Epoch: 5610/20000, Loss: 0.00028543\n",
      "Epoch: 5620/20000, Loss: 0.00028289\n",
      "Epoch: 5630/20000, Loss: 0.00028037\n",
      "Epoch: 5640/20000, Loss: 0.00027788\n",
      "Epoch: 5650/20000, Loss: 0.00027540\n",
      "Epoch: 5660/20000, Loss: 0.00027295\n",
      "Epoch: 5670/20000, Loss: 0.00027051\n",
      "Epoch: 5680/20000, Loss: 0.00026809\n",
      "Epoch: 5690/20000, Loss: 0.00026569\n",
      "Epoch: 5700/20000, Loss: 0.00026331\n",
      "Epoch: 5710/20000, Loss: 0.00026095\n",
      "Epoch: 5720/20000, Loss: 0.00025861\n",
      "Epoch: 5730/20000, Loss: 0.00025629\n",
      "Epoch: 5740/20000, Loss: 0.00025399\n",
      "Epoch: 5750/20000, Loss: 0.00025170\n",
      "Epoch: 5760/20000, Loss: 0.00024943\n",
      "Epoch: 5770/20000, Loss: 0.00024718\n",
      "Epoch: 5780/20000, Loss: 0.00024495\n",
      "Epoch: 5790/20000, Loss: 0.00024274\n",
      "Epoch: 5800/20000, Loss: 0.00024054\n",
      "Epoch: 5810/20000, Loss: 0.00023836\n",
      "Epoch: 5820/20000, Loss: 0.00023620\n",
      "Epoch: 5830/20000, Loss: 0.00023406\n",
      "Epoch: 5840/20000, Loss: 0.00023193\n",
      "Epoch: 5850/20000, Loss: 0.00022982\n",
      "Epoch: 5860/20000, Loss: 0.00022773\n",
      "Epoch: 5870/20000, Loss: 0.00022566\n",
      "Epoch: 5880/20000, Loss: 0.00022360\n",
      "Epoch: 5890/20000, Loss: 0.00022156\n",
      "Epoch: 5900/20000, Loss: 0.00021954\n",
      "Epoch: 5910/20000, Loss: 0.00021753\n",
      "Epoch: 5920/20000, Loss: 0.00021554\n",
      "Epoch: 5930/20000, Loss: 0.00021356\n",
      "Epoch: 5940/20000, Loss: 0.00021160\n",
      "Epoch: 5950/20000, Loss: 0.00020966\n",
      "Epoch: 5960/20000, Loss: 0.00020773\n",
      "Epoch: 5970/20000, Loss: 0.00020582\n",
      "Epoch: 5980/20000, Loss: 0.00020393\n",
      "Epoch: 5990/20000, Loss: 0.00020205\n",
      "Epoch: 6000/20000, Loss: 0.00020018\n",
      "Epoch: 6010/20000, Loss: 0.00019833\n",
      "Epoch: 6020/20000, Loss: 0.00019650\n",
      "Epoch: 6030/20000, Loss: 0.00019468\n",
      "Epoch: 6040/20000, Loss: 0.00019287\n",
      "Epoch: 6050/20000, Loss: 0.00019108\n",
      "Epoch: 6060/20000, Loss: 0.00018930\n",
      "Epoch: 6070/20000, Loss: 0.00018754\n",
      "Epoch: 6080/20000, Loss: 0.00018579\n",
      "Epoch: 6090/20000, Loss: 0.00018406\n",
      "Epoch: 6100/20000, Loss: 0.00018234\n",
      "Epoch: 6110/20000, Loss: 0.00018064\n",
      "Epoch: 6120/20000, Loss: 0.00017894\n",
      "Epoch: 6130/20000, Loss: 0.00017727\n",
      "Epoch: 6140/20000, Loss: 0.00017560\n",
      "Epoch: 6150/20000, Loss: 0.00017398\n",
      "Epoch: 6160/20000, Loss: 0.00017233\n",
      "Epoch: 6170/20000, Loss: 0.00017069\n",
      "Epoch: 6180/20000, Loss: 0.00016909\n",
      "Epoch: 6190/20000, Loss: 0.00016749\n",
      "Epoch: 6200/20000, Loss: 0.00016591\n",
      "Epoch: 6210/20000, Loss: 0.00016434\n",
      "Epoch: 6220/20000, Loss: 0.00016278\n",
      "Epoch: 6230/20000, Loss: 0.00016124\n",
      "Epoch: 6240/20000, Loss: 0.00015971\n",
      "Epoch: 6250/20000, Loss: 0.00015820\n",
      "Epoch: 6260/20000, Loss: 0.00015669\n",
      "Epoch: 6270/20000, Loss: 0.00015520\n",
      "Epoch: 6280/20000, Loss: 0.00015372\n",
      "Epoch: 6290/20000, Loss: 0.00015226\n",
      "Epoch: 6300/20000, Loss: 0.00015080\n",
      "Epoch: 6310/20000, Loss: 0.00014936\n",
      "Epoch: 6320/20000, Loss: 0.00014793\n",
      "Epoch: 6330/20000, Loss: 0.00014653\n",
      "Epoch: 6340/20000, Loss: 0.00014512\n",
      "Epoch: 6350/20000, Loss: 0.00014372\n",
      "Epoch: 6360/20000, Loss: 0.00014235\n",
      "Epoch: 6370/20000, Loss: 0.00014098\n",
      "Epoch: 6380/20000, Loss: 0.00013963\n",
      "Epoch: 6390/20000, Loss: 0.00013828\n",
      "Epoch: 6400/20000, Loss: 0.00013695\n",
      "Epoch: 6410/20000, Loss: 0.00013563\n",
      "Epoch: 6420/20000, Loss: 0.00013433\n",
      "Epoch: 6430/20000, Loss: 0.00013303\n",
      "Epoch: 6440/20000, Loss: 0.00013174\n",
      "Epoch: 6450/20000, Loss: 0.00013047\n",
      "Epoch: 6460/20000, Loss: 0.00012921\n",
      "Epoch: 6470/20000, Loss: 0.00012796\n",
      "Epoch: 6480/20000, Loss: 0.00012672\n",
      "Epoch: 6490/20000, Loss: 0.00012549\n",
      "Epoch: 6500/20000, Loss: 0.00012427\n",
      "Epoch: 6510/20000, Loss: 0.00012307\n",
      "Epoch: 6520/20000, Loss: 0.00012190\n",
      "Epoch: 6530/20000, Loss: 0.00012070\n",
      "Epoch: 6540/20000, Loss: 0.00011951\n",
      "Epoch: 6550/20000, Loss: 0.00011835\n",
      "Epoch: 6560/20000, Loss: 0.00011720\n",
      "Epoch: 6570/20000, Loss: 0.00011606\n",
      "Epoch: 6580/20000, Loss: 0.00011493\n",
      "Epoch: 6590/20000, Loss: 0.00011380\n",
      "Epoch: 6600/20000, Loss: 0.00011269\n",
      "Epoch: 6610/20000, Loss: 0.00011159\n",
      "Epoch: 6620/20000, Loss: 0.00011050\n",
      "Epoch: 6630/20000, Loss: 0.00010942\n",
      "Epoch: 6640/20000, Loss: 0.00010835\n",
      "Epoch: 6650/20000, Loss: 0.00010729\n",
      "Epoch: 6660/20000, Loss: 0.00010624\n",
      "Epoch: 6670/20000, Loss: 0.00010520\n",
      "Epoch: 6680/20000, Loss: 0.00010417\n",
      "Epoch: 6690/20000, Loss: 0.00010314\n",
      "Epoch: 6700/20000, Loss: 0.00010213\n",
      "Epoch: 6710/20000, Loss: 0.00010113\n",
      "Epoch: 6720/20000, Loss: 0.00010013\n",
      "Epoch: 6730/20000, Loss: 0.00009918\n",
      "Epoch: 6740/20000, Loss: 0.00009819\n",
      "Epoch: 6750/20000, Loss: 0.00009721\n",
      "Epoch: 6760/20000, Loss: 0.00009625\n",
      "Epoch: 6770/20000, Loss: 0.00009530\n",
      "Epoch: 6780/20000, Loss: 0.00009436\n",
      "Epoch: 6790/20000, Loss: 0.00009343\n",
      "Epoch: 6800/20000, Loss: 0.00009251\n",
      "Epoch: 6810/20000, Loss: 0.00009160\n",
      "Epoch: 6820/20000, Loss: 0.00009070\n",
      "Epoch: 6830/20000, Loss: 0.00008980\n",
      "Epoch: 6840/20000, Loss: 0.00008892\n",
      "Epoch: 6850/20000, Loss: 0.00008804\n",
      "Epoch: 6860/20000, Loss: 0.00008717\n",
      "Epoch: 6870/20000, Loss: 0.00008631\n",
      "Epoch: 6880/20000, Loss: 0.00008545\n",
      "Epoch: 6890/20000, Loss: 0.00008461\n",
      "Epoch: 6900/20000, Loss: 0.00008377\n",
      "Epoch: 6910/20000, Loss: 0.00008295\n",
      "Epoch: 6920/20000, Loss: 0.00008213\n",
      "Epoch: 6930/20000, Loss: 0.00008131\n",
      "Epoch: 6940/20000, Loss: 0.00008050\n",
      "Epoch: 6950/20000, Loss: 0.00007970\n",
      "Epoch: 6960/20000, Loss: 0.00007891\n",
      "Epoch: 6970/20000, Loss: 0.00007813\n",
      "Epoch: 6980/20000, Loss: 0.00007736\n",
      "Epoch: 6990/20000, Loss: 0.00007659\n",
      "Epoch: 7000/20000, Loss: 0.00007583\n",
      "Epoch: 7010/20000, Loss: 0.00007508\n",
      "Epoch: 7020/20000, Loss: 0.00007433\n",
      "Epoch: 7030/20000, Loss: 0.00007360\n",
      "Epoch: 7040/20000, Loss: 0.00007287\n",
      "Epoch: 7050/20000, Loss: 0.00007214\n",
      "Epoch: 7060/20000, Loss: 0.00007143\n",
      "Epoch: 7070/20000, Loss: 0.00007072\n",
      "Epoch: 7080/20000, Loss: 0.00007002\n",
      "Epoch: 7090/20000, Loss: 0.00006937\n",
      "Epoch: 7100/20000, Loss: 0.00006864\n",
      "Epoch: 7110/20000, Loss: 0.00006795\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 7120/20000, Loss: 0.00006728\n",
      "Epoch: 7130/20000, Loss: 0.00006661\n",
      "Epoch: 7140/20000, Loss: 0.00006594\n",
      "Epoch: 7150/20000, Loss: 0.00006529\n",
      "Epoch: 7160/20000, Loss: 0.00006464\n",
      "Epoch: 7170/20000, Loss: 0.00006400\n",
      "Epoch: 7180/20000, Loss: 0.00006336\n",
      "Epoch: 7190/20000, Loss: 0.00006273\n",
      "Epoch: 7200/20000, Loss: 0.00006211\n",
      "Epoch: 7210/20000, Loss: 0.00006149\n",
      "Epoch: 7220/20000, Loss: 0.00006088\n",
      "Epoch: 7230/20000, Loss: 0.00006027\n",
      "Epoch: 7240/20000, Loss: 0.00005967\n",
      "Epoch: 7250/20000, Loss: 0.00005908\n",
      "Epoch: 7260/20000, Loss: 0.00005849\n",
      "Epoch: 7270/20000, Loss: 0.00005792\n",
      "Epoch: 7280/20000, Loss: 0.00005734\n",
      "Epoch: 7290/20000, Loss: 0.00005678\n",
      "Epoch: 7300/20000, Loss: 0.00005620\n",
      "Epoch: 7310/20000, Loss: 0.00005564\n",
      "Epoch: 7320/20000, Loss: 0.00005509\n",
      "Epoch: 7330/20000, Loss: 0.00005454\n",
      "Epoch: 7340/20000, Loss: 0.00005400\n",
      "Epoch: 7350/20000, Loss: 0.00005346\n",
      "Epoch: 7360/20000, Loss: 0.00005293\n",
      "Epoch: 7370/20000, Loss: 0.00005240\n",
      "Epoch: 7380/20000, Loss: 0.00005188\n",
      "Epoch: 7390/20000, Loss: 0.00005136\n",
      "Epoch: 7400/20000, Loss: 0.00005085\n",
      "Epoch: 7410/20000, Loss: 0.00005034\n",
      "Epoch: 7420/20000, Loss: 0.00004984\n",
      "Epoch: 7430/20000, Loss: 0.00004935\n",
      "Epoch: 7440/20000, Loss: 0.00004885\n",
      "Epoch: 7450/20000, Loss: 0.00004837\n",
      "Epoch: 7460/20000, Loss: 0.00004788\n",
      "Epoch: 7470/20000, Loss: 0.00004741\n",
      "Epoch: 7480/20000, Loss: 0.00004693\n",
      "Epoch: 7490/20000, Loss: 0.00004647\n",
      "Epoch: 7500/20000, Loss: 0.00004602\n",
      "Epoch: 7510/20000, Loss: 0.00004555\n",
      "Epoch: 7520/20000, Loss: 0.00004509\n",
      "Epoch: 7530/20000, Loss: 0.00004464\n",
      "Epoch: 7540/20000, Loss: 0.00004419\n",
      "Epoch: 7550/20000, Loss: 0.00004375\n",
      "Epoch: 7560/20000, Loss: 0.00004332\n",
      "Epoch: 7570/20000, Loss: 0.00004288\n",
      "Epoch: 7580/20000, Loss: 0.00004245\n",
      "Epoch: 7590/20000, Loss: 0.00004203\n",
      "Epoch: 7600/20000, Loss: 0.00004161\n",
      "Epoch: 7610/20000, Loss: 0.00004119\n",
      "Epoch: 7620/20000, Loss: 0.00004078\n",
      "Epoch: 7630/20000, Loss: 0.00004037\n",
      "Epoch: 7640/20000, Loss: 0.00003997\n",
      "Epoch: 7650/20000, Loss: 0.00003957\n",
      "Epoch: 7660/20000, Loss: 0.00003917\n",
      "Epoch: 7670/20000, Loss: 0.00003878\n",
      "Epoch: 7680/20000, Loss: 0.00003839\n",
      "Epoch: 7690/20000, Loss: 0.00003801\n",
      "Epoch: 7700/20000, Loss: 0.00003768\n",
      "Epoch: 7710/20000, Loss: 0.00003726\n",
      "Epoch: 7720/20000, Loss: 0.00003687\n",
      "Epoch: 7730/20000, Loss: 0.00003651\n",
      "Epoch: 7740/20000, Loss: 0.00003614\n",
      "Epoch: 7750/20000, Loss: 0.00003577\n",
      "Epoch: 7760/20000, Loss: 0.00003541\n",
      "Epoch: 7770/20000, Loss: 0.00003506\n",
      "Epoch: 7780/20000, Loss: 0.00003471\n",
      "Epoch: 7790/20000, Loss: 0.00003436\n",
      "Epoch: 7800/20000, Loss: 0.00003401\n",
      "Epoch: 7810/20000, Loss: 0.00003367\n",
      "Epoch: 7820/20000, Loss: 0.00003333\n",
      "Epoch: 7830/20000, Loss: 0.00003299\n",
      "Epoch: 7840/20000, Loss: 0.00003266\n",
      "Epoch: 7850/20000, Loss: 0.00003233\n",
      "Epoch: 7860/20000, Loss: 0.00003201\n",
      "Epoch: 7870/20000, Loss: 0.00003168\n",
      "Epoch: 7880/20000, Loss: 0.00003137\n",
      "Epoch: 7890/20000, Loss: 0.00003106\n",
      "Epoch: 7900/20000, Loss: 0.00003073\n",
      "Epoch: 7910/20000, Loss: 0.00003043\n",
      "Epoch: 7920/20000, Loss: 0.00003012\n",
      "Epoch: 7930/20000, Loss: 0.00002981\n",
      "Epoch: 7940/20000, Loss: 0.00002951\n",
      "Epoch: 7950/20000, Loss: 0.00002921\n",
      "Epoch: 7960/20000, Loss: 0.00002892\n",
      "Epoch: 7970/20000, Loss: 0.00002862\n",
      "Epoch: 7980/20000, Loss: 0.00002833\n",
      "Epoch: 7990/20000, Loss: 0.00002805\n",
      "Epoch: 8000/20000, Loss: 0.00002776\n",
      "Epoch: 8010/20000, Loss: 0.00002748\n",
      "Epoch: 8020/20000, Loss: 0.00002720\n",
      "Epoch: 8030/20000, Loss: 0.00002693\n",
      "Epoch: 8040/20000, Loss: 0.00002665\n",
      "Epoch: 8050/20000, Loss: 0.00002639\n",
      "Epoch: 8060/20000, Loss: 0.00002616\n",
      "Epoch: 8070/20000, Loss: 0.00002588\n",
      "Epoch: 8080/20000, Loss: 0.00002559\n",
      "Epoch: 8090/20000, Loss: 0.00002533\n",
      "Epoch: 8100/20000, Loss: 0.00002507\n",
      "Epoch: 8110/20000, Loss: 0.00002482\n",
      "Epoch: 8120/20000, Loss: 0.00002457\n",
      "Epoch: 8130/20000, Loss: 0.00002432\n",
      "Epoch: 8140/20000, Loss: 0.00002407\n",
      "Epoch: 8150/20000, Loss: 0.00002383\n",
      "Epoch: 8160/20000, Loss: 0.00002358\n",
      "Epoch: 8170/20000, Loss: 0.00002334\n",
      "Epoch: 8180/20000, Loss: 0.00002311\n",
      "Epoch: 8190/20000, Loss: 0.00002287\n",
      "Epoch: 8200/20000, Loss: 0.00002264\n",
      "Epoch: 8210/20000, Loss: 0.00002241\n",
      "Epoch: 8220/20000, Loss: 0.00002218\n",
      "Epoch: 8230/20000, Loss: 0.00002195\n",
      "Epoch: 8240/20000, Loss: 0.00002173\n",
      "Epoch: 8250/20000, Loss: 0.00002151\n",
      "Epoch: 8260/20000, Loss: 0.00002129\n",
      "Epoch: 8270/20000, Loss: 0.00002112\n",
      "Epoch: 8280/20000, Loss: 0.00002089\n",
      "Epoch: 8290/20000, Loss: 0.00002064\n",
      "Epoch: 8300/20000, Loss: 0.00002044\n",
      "Epoch: 8310/20000, Loss: 0.00002022\n",
      "Epoch: 8320/20000, Loss: 0.00002002\n",
      "Epoch: 8330/20000, Loss: 0.00001981\n",
      "Epoch: 8340/20000, Loss: 0.00001961\n",
      "Epoch: 8350/20000, Loss: 0.00001941\n",
      "Epoch: 8360/20000, Loss: 0.00001921\n",
      "Epoch: 8370/20000, Loss: 0.00001902\n",
      "Epoch: 8380/20000, Loss: 0.00001882\n",
      "Epoch: 8390/20000, Loss: 0.00001863\n",
      "Epoch: 8400/20000, Loss: 0.00001844\n",
      "Epoch: 8410/20000, Loss: 0.00001825\n",
      "Epoch: 8420/20000, Loss: 0.00001806\n",
      "Epoch: 8430/20000, Loss: 0.00001788\n",
      "Epoch: 8440/20000, Loss: 0.00001770\n",
      "Epoch: 8450/20000, Loss: 0.00001752\n",
      "Epoch: 8460/20000, Loss: 0.00001734\n",
      "Epoch: 8470/20000, Loss: 0.00001720\n",
      "Epoch: 8480/20000, Loss: 0.00001701\n",
      "Epoch: 8490/20000, Loss: 0.00001681\n",
      "Epoch: 8500/20000, Loss: 0.00001664\n",
      "Epoch: 8510/20000, Loss: 0.00001647\n",
      "Epoch: 8520/20000, Loss: 0.00001630\n",
      "Epoch: 8530/20000, Loss: 0.00001613\n",
      "Epoch: 8540/20000, Loss: 0.00001597\n",
      "Epoch: 8550/20000, Loss: 0.00001580\n",
      "Epoch: 8560/20000, Loss: 0.00001564\n",
      "Epoch: 8570/20000, Loss: 0.00001548\n",
      "Epoch: 8580/20000, Loss: 0.00001532\n",
      "Epoch: 8590/20000, Loss: 0.00001516\n",
      "Epoch: 8600/20000, Loss: 0.00001501\n",
      "Epoch: 8610/20000, Loss: 0.00001485\n",
      "Epoch: 8620/20000, Loss: 0.00001470\n",
      "Epoch: 8630/20000, Loss: 0.00001455\n",
      "Epoch: 8640/20000, Loss: 0.00001440\n",
      "Epoch: 8650/20000, Loss: 0.00001425\n",
      "Epoch: 8660/20000, Loss: 0.00001412\n",
      "Epoch: 8670/20000, Loss: 0.00001397\n",
      "Epoch: 8680/20000, Loss: 0.00001384\n",
      "Epoch: 8690/20000, Loss: 0.00001368\n",
      "Epoch: 8700/20000, Loss: 0.00001354\n",
      "Epoch: 8710/20000, Loss: 0.00001340\n",
      "Epoch: 8720/20000, Loss: 0.00001326\n",
      "Epoch: 8730/20000, Loss: 0.00001313\n",
      "Epoch: 8740/20000, Loss: 0.00001299\n",
      "Epoch: 8750/20000, Loss: 0.00001286\n",
      "Epoch: 8760/20000, Loss: 0.00001273\n",
      "Epoch: 8770/20000, Loss: 0.00001260\n",
      "Epoch: 8780/20000, Loss: 0.00001247\n",
      "Epoch: 8790/20000, Loss: 0.00001234\n",
      "Epoch: 8800/20000, Loss: 0.00001221\n",
      "Epoch: 8810/20000, Loss: 0.00001209\n",
      "Epoch: 8820/20000, Loss: 0.00001196\n",
      "Epoch: 8830/20000, Loss: 0.00001184\n",
      "Epoch: 8840/20000, Loss: 0.00001172\n",
      "Epoch: 8850/20000, Loss: 0.00001160\n",
      "Epoch: 8860/20000, Loss: 0.00001148\n",
      "Epoch: 8870/20000, Loss: 0.00001142\n",
      "Epoch: 8880/20000, Loss: 0.00001124\n",
      "Epoch: 8890/20000, Loss: 0.00001113\n",
      "Epoch: 8900/20000, Loss: 0.00001101\n",
      "Epoch: 8910/20000, Loss: 0.00001090\n",
      "Epoch: 8920/20000, Loss: 0.00001079\n",
      "Epoch: 8930/20000, Loss: 0.00001068\n",
      "Epoch: 8940/20000, Loss: 0.00001057\n",
      "Epoch: 8950/20000, Loss: 0.00001046\n",
      "Epoch: 8960/20000, Loss: 0.00001035\n",
      "Epoch: 8970/20000, Loss: 0.00001025\n",
      "Epoch: 8980/20000, Loss: 0.00001014\n",
      "Epoch: 8990/20000, Loss: 0.00001004\n",
      "Epoch: 9000/20000, Loss: 0.00000993\n",
      "Epoch: 9010/20000, Loss: 0.00000983\n",
      "Epoch: 9020/20000, Loss: 0.00000973\n",
      "Epoch: 9030/20000, Loss: 0.00000963\n",
      "Epoch: 9040/20000, Loss: 0.00000953\n",
      "Epoch: 9050/20000, Loss: 0.00000944\n",
      "Epoch: 9060/20000, Loss: 0.00000941\n",
      "Epoch: 9070/20000, Loss: 0.00000929\n",
      "Epoch: 9080/20000, Loss: 0.00000915\n",
      "Epoch: 9090/20000, Loss: 0.00000906\n",
      "Epoch: 9100/20000, Loss: 0.00000896\n",
      "Epoch: 9110/20000, Loss: 0.00000887\n",
      "Epoch: 9120/20000, Loss: 0.00000878\n",
      "Epoch: 9130/20000, Loss: 0.00000869\n",
      "Epoch: 9140/20000, Loss: 0.00000860\n",
      "Epoch: 9150/20000, Loss: 0.00000851\n",
      "Epoch: 9160/20000, Loss: 0.00000843\n",
      "Epoch: 9170/20000, Loss: 0.00000834\n",
      "Epoch: 9180/20000, Loss: 0.00000826\n",
      "Epoch: 9190/20000, Loss: 0.00000817\n",
      "Epoch: 9200/20000, Loss: 0.00000809\n",
      "Epoch: 9210/20000, Loss: 0.00000800\n",
      "Epoch: 9220/20000, Loss: 0.00000792\n",
      "Epoch: 9230/20000, Loss: 0.00000784\n",
      "Epoch: 9240/20000, Loss: 0.00000776\n",
      "Epoch: 9250/20000, Loss: 0.00000768\n",
      "Epoch: 9260/20000, Loss: 0.00000761\n",
      "Epoch: 9270/20000, Loss: 0.00000754\n",
      "Epoch: 9280/20000, Loss: 0.00000747\n",
      "Epoch: 9290/20000, Loss: 0.00000738\n",
      "Epoch: 9300/20000, Loss: 0.00000730\n",
      "Epoch: 9310/20000, Loss: 0.00000723\n",
      "Epoch: 9320/20000, Loss: 0.00000715\n",
      "Epoch: 9330/20000, Loss: 0.00000708\n",
      "Epoch: 9340/20000, Loss: 0.00000701\n",
      "Epoch: 9350/20000, Loss: 0.00000694\n",
      "Epoch: 9360/20000, Loss: 0.00000686\n",
      "Epoch: 9370/20000, Loss: 0.00000680\n",
      "Epoch: 9380/20000, Loss: 0.00000673\n",
      "Epoch: 9390/20000, Loss: 0.00000671\n",
      "Epoch: 9400/20000, Loss: 0.00000660\n",
      "Epoch: 9410/20000, Loss: 0.00000653\n",
      "Epoch: 9420/20000, Loss: 0.00000646\n",
      "Epoch: 9430/20000, Loss: 0.00000639\n",
      "Epoch: 9440/20000, Loss: 0.00000633\n",
      "Epoch: 9450/20000, Loss: 0.00000626\n",
      "Epoch: 9460/20000, Loss: 0.00000620\n",
      "Epoch: 9470/20000, Loss: 0.00000614\n",
      "Epoch: 9480/20000, Loss: 0.00000607\n",
      "Epoch: 9490/20000, Loss: 0.00000601\n",
      "Epoch: 9500/20000, Loss: 0.00000595\n",
      "Epoch: 9510/20000, Loss: 0.00000589\n",
      "Epoch: 9520/20000, Loss: 0.00000583\n",
      "Epoch: 9530/20000, Loss: 0.00000581\n",
      "Epoch: 9540/20000, Loss: 0.00000572\n",
      "Epoch: 9550/20000, Loss: 0.00000567\n",
      "Epoch: 9560/20000, Loss: 0.00000560\n",
      "Epoch: 9570/20000, Loss: 0.00000555\n",
      "Epoch: 9580/20000, Loss: 0.00000549\n",
      "Epoch: 9590/20000, Loss: 0.00000543\n",
      "Epoch: 9600/20000, Loss: 0.00000538\n",
      "Epoch: 9610/20000, Loss: 0.00000532\n",
      "Epoch: 9620/20000, Loss: 0.00000527\n",
      "Epoch: 9630/20000, Loss: 0.00000522\n",
      "Epoch: 9640/20000, Loss: 0.00000517\n",
      "Epoch: 9650/20000, Loss: 0.00000512\n",
      "Epoch: 9660/20000, Loss: 0.00000506\n",
      "Epoch: 9670/20000, Loss: 0.00000501\n",
      "Epoch: 9680/20000, Loss: 0.00000496\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 9690/20000, Loss: 0.00000491\n",
      "Epoch: 9700/20000, Loss: 0.00000486\n",
      "Epoch: 9710/20000, Loss: 0.00000482\n",
      "Epoch: 9720/20000, Loss: 0.00000479\n",
      "Epoch: 9730/20000, Loss: 0.00000472\n",
      "Epoch: 9740/20000, Loss: 0.00000467\n",
      "Epoch: 9750/20000, Loss: 0.00000463\n",
      "Epoch: 9760/20000, Loss: 0.00000458\n",
      "Epoch: 9770/20000, Loss: 0.00000453\n",
      "Epoch: 9780/20000, Loss: 0.00000449\n",
      "Epoch: 9790/20000, Loss: 0.00000444\n",
      "Epoch: 9800/20000, Loss: 0.00000440\n",
      "Epoch: 9810/20000, Loss: 0.00000436\n",
      "Epoch: 9820/20000, Loss: 0.00000431\n",
      "Epoch: 9830/20000, Loss: 0.00000427\n",
      "Epoch: 9840/20000, Loss: 0.00000423\n",
      "Epoch: 9850/20000, Loss: 0.00000419\n",
      "Epoch: 9860/20000, Loss: 0.00000419\n",
      "Epoch: 9870/20000, Loss: 0.00000412\n",
      "Epoch: 9880/20000, Loss: 0.00000407\n",
      "Epoch: 9890/20000, Loss: 0.00000403\n",
      "Epoch: 9900/20000, Loss: 0.00000398\n",
      "Epoch: 9910/20000, Loss: 0.00000394\n",
      "Epoch: 9920/20000, Loss: 0.00000391\n",
      "Epoch: 9930/20000, Loss: 0.00000387\n",
      "Epoch: 9940/20000, Loss: 0.00000384\n",
      "Epoch: 9950/20000, Loss: 0.00000380\n",
      "Epoch: 9960/20000, Loss: 0.00000376\n",
      "Epoch: 9970/20000, Loss: 0.00000372\n",
      "Epoch: 9980/20000, Loss: 0.00000368\n",
      "Epoch: 9990/20000, Loss: 0.00000366\n",
      "Epoch: 10000/20000, Loss: 0.00000361\n",
      "Epoch: 10010/20000, Loss: 0.00000358\n",
      "Epoch: 10020/20000, Loss: 0.00000354\n",
      "Epoch: 10030/20000, Loss: 0.00000351\n",
      "Epoch: 10040/20000, Loss: 0.00000347\n",
      "Epoch: 10050/20000, Loss: 0.00000344\n",
      "Epoch: 10060/20000, Loss: 0.00000340\n",
      "Epoch: 10070/20000, Loss: 0.00000337\n",
      "Epoch: 10080/20000, Loss: 0.00000334\n",
      "Epoch: 10090/20000, Loss: 0.00000332\n",
      "Epoch: 10100/20000, Loss: 0.00000330\n",
      "Epoch: 10110/20000, Loss: 0.00000324\n",
      "Epoch: 10120/20000, Loss: 0.00000321\n",
      "Epoch: 10130/20000, Loss: 0.00000318\n",
      "Epoch: 10140/20000, Loss: 0.00000315\n",
      "Epoch: 10150/20000, Loss: 0.00000312\n",
      "Epoch: 10160/20000, Loss: 0.00000309\n",
      "Epoch: 10170/20000, Loss: 0.00000306\n",
      "Epoch: 10180/20000, Loss: 0.00000303\n",
      "Epoch: 10190/20000, Loss: 0.00000300\n",
      "Epoch: 10200/20000, Loss: 0.00000297\n",
      "Epoch: 10210/20000, Loss: 0.00000294\n",
      "Epoch: 10220/20000, Loss: 0.00000293\n",
      "Epoch: 10230/20000, Loss: 0.00000291\n",
      "Epoch: 10240/20000, Loss: 0.00000287\n",
      "Epoch: 10250/20000, Loss: 0.00000284\n",
      "Epoch: 10260/20000, Loss: 0.00000281\n",
      "Epoch: 10270/20000, Loss: 0.00000278\n",
      "Epoch: 10280/20000, Loss: 0.00000275\n",
      "Epoch: 10290/20000, Loss: 0.00000273\n",
      "Epoch: 10300/20000, Loss: 0.00000270\n",
      "Epoch: 10310/20000, Loss: 0.00000268\n",
      "Epoch: 10320/20000, Loss: 0.00000267\n",
      "Epoch: 10330/20000, Loss: 0.00000263\n",
      "Epoch: 10340/20000, Loss: 0.00000260\n",
      "Epoch: 10350/20000, Loss: 0.00000258\n",
      "Epoch: 10360/20000, Loss: 0.00000255\n",
      "Epoch: 10370/20000, Loss: 0.00000253\n",
      "Epoch: 10380/20000, Loss: 0.00000250\n",
      "Epoch: 10390/20000, Loss: 0.00000248\n",
      "Epoch: 10400/20000, Loss: 0.00000247\n",
      "Epoch: 10410/20000, Loss: 0.00000244\n",
      "Epoch: 10420/20000, Loss: 0.00000241\n",
      "Epoch: 10430/20000, Loss: 0.00000239\n",
      "Epoch: 10440/20000, Loss: 0.00000237\n",
      "Epoch: 10450/20000, Loss: 0.00000236\n",
      "Epoch: 10460/20000, Loss: 0.00000233\n",
      "Epoch: 10470/20000, Loss: 0.00000230\n",
      "Epoch: 10480/20000, Loss: 0.00000228\n",
      "Epoch: 10490/20000, Loss: 0.00000226\n",
      "Epoch: 10500/20000, Loss: 0.00000224\n",
      "Epoch: 10510/20000, Loss: 0.00000222\n",
      "Epoch: 10520/20000, Loss: 0.00000220\n",
      "Epoch: 10530/20000, Loss: 0.00000218\n",
      "Epoch: 10540/20000, Loss: 0.00000221\n",
      "Epoch: 10550/20000, Loss: 0.00000216\n",
      "Epoch: 10560/20000, Loss: 0.00000212\n",
      "Epoch: 10570/20000, Loss: 0.00000210\n",
      "Epoch: 10580/20000, Loss: 0.00000208\n",
      "Epoch: 10590/20000, Loss: 0.00000206\n",
      "Epoch: 10600/20000, Loss: 0.00000204\n",
      "Epoch: 10610/20000, Loss: 0.00000202\n",
      "Epoch: 10620/20000, Loss: 0.00000200\n",
      "Epoch: 10630/20000, Loss: 0.00000199\n",
      "Epoch: 10640/20000, Loss: 0.00000198\n",
      "Epoch: 10650/20000, Loss: 0.00000195\n",
      "Epoch: 10660/20000, Loss: 0.00000193\n",
      "Epoch: 10670/20000, Loss: 0.00000191\n",
      "Epoch: 10680/20000, Loss: 0.00000190\n",
      "Epoch: 10690/20000, Loss: 0.00000189\n",
      "Epoch: 10700/20000, Loss: 0.00000188\n",
      "Epoch: 10710/20000, Loss: 0.00000185\n",
      "Epoch: 10720/20000, Loss: 0.00000183\n",
      "Epoch: 10730/20000, Loss: 0.00000181\n",
      "Epoch: 10740/20000, Loss: 0.00000180\n",
      "Epoch: 10750/20000, Loss: 0.00000178\n",
      "Epoch: 10760/20000, Loss: 0.00000177\n",
      "Epoch: 10770/20000, Loss: 0.00000178\n",
      "Epoch: 10780/20000, Loss: 0.00000174\n",
      "Epoch: 10790/20000, Loss: 0.00000172\n",
      "Epoch: 10800/20000, Loss: 0.00000170\n",
      "Epoch: 10810/20000, Loss: 0.00000169\n",
      "Epoch: 10820/20000, Loss: 0.00000167\n",
      "Epoch: 10830/20000, Loss: 0.00000166\n",
      "Epoch: 10840/20000, Loss: 0.00000164\n",
      "Epoch: 10850/20000, Loss: 0.00000165\n",
      "Epoch: 10860/20000, Loss: 0.00000162\n",
      "Epoch: 10870/20000, Loss: 0.00000160\n",
      "Epoch: 10880/20000, Loss: 0.00000159\n",
      "Epoch: 10890/20000, Loss: 0.00000157\n",
      "Epoch: 10900/20000, Loss: 0.00000157\n",
      "Epoch: 10910/20000, Loss: 0.00000156\n",
      "Epoch: 10920/20000, Loss: 0.00000153\n",
      "Epoch: 10930/20000, Loss: 0.00000152\n",
      "Epoch: 10940/20000, Loss: 0.00000150\n",
      "Epoch: 10950/20000, Loss: 0.00000149\n",
      "Epoch: 10960/20000, Loss: 0.00000149\n",
      "Epoch: 10970/20000, Loss: 0.00000150\n",
      "Epoch: 10980/20000, Loss: 0.00000145\n",
      "Epoch: 10990/20000, Loss: 0.00000144\n",
      "Epoch: 11000/20000, Loss: 0.00000143\n",
      "Epoch: 11010/20000, Loss: 0.00000141\n",
      "Epoch: 11020/20000, Loss: 0.00000140\n",
      "Epoch: 11030/20000, Loss: 0.00000139\n",
      "Epoch: 11040/20000, Loss: 0.00000139\n",
      "Epoch: 11050/20000, Loss: 0.00000142\n",
      "Epoch: 11060/20000, Loss: 0.00000137\n",
      "Epoch: 11070/20000, Loss: 0.00000135\n",
      "Epoch: 11080/20000, Loss: 0.00000133\n",
      "Epoch: 11090/20000, Loss: 0.00000132\n",
      "Epoch: 11100/20000, Loss: 0.00000131\n",
      "Epoch: 11110/20000, Loss: 0.00000130\n",
      "Epoch: 11120/20000, Loss: 0.00000129\n",
      "Epoch: 11130/20000, Loss: 0.00000129\n",
      "Epoch: 11140/20000, Loss: 0.00000129\n",
      "Epoch: 11150/20000, Loss: 0.00000126\n",
      "Epoch: 11160/20000, Loss: 0.00000124\n",
      "Epoch: 11170/20000, Loss: 0.00000123\n",
      "Epoch: 11180/20000, Loss: 0.00000122\n",
      "Epoch: 11190/20000, Loss: 0.00000121\n",
      "Epoch: 11200/20000, Loss: 0.00000120\n",
      "Epoch: 11210/20000, Loss: 0.00000119\n",
      "Epoch: 11220/20000, Loss: 0.00000122\n",
      "Epoch: 11230/20000, Loss: 0.00000124\n",
      "Epoch: 11240/20000, Loss: 0.00000117\n",
      "Epoch: 11250/20000, Loss: 0.00000116\n",
      "Epoch: 11260/20000, Loss: 0.00000115\n",
      "Epoch: 11270/20000, Loss: 0.00000113\n",
      "Epoch: 11280/20000, Loss: 0.00000113\n",
      "Epoch: 11290/20000, Loss: 0.00000112\n",
      "Epoch: 11300/20000, Loss: 0.00000111\n",
      "Epoch: 11310/20000, Loss: 0.00000110\n",
      "Epoch: 11320/20000, Loss: 0.00000109\n",
      "Epoch: 11330/20000, Loss: 0.00000108\n",
      "Epoch: 11340/20000, Loss: 0.00000111\n",
      "Epoch: 11350/20000, Loss: 0.00000106\n",
      "Epoch: 11360/20000, Loss: 0.00000106\n",
      "Epoch: 11370/20000, Loss: 0.00000105\n",
      "Epoch: 11380/20000, Loss: 0.00000104\n",
      "Epoch: 11390/20000, Loss: 0.00000103\n",
      "Epoch: 11400/20000, Loss: 0.00000105\n",
      "Epoch: 11410/20000, Loss: 0.00000102\n",
      "Epoch: 11420/20000, Loss: 0.00000100\n",
      "Epoch: 11430/20000, Loss: 0.00000100\n",
      "Epoch: 11440/20000, Loss: 0.00000099\n",
      "Epoch: 11450/20000, Loss: 0.00000098\n",
      "Epoch: 11460/20000, Loss: 0.00000097\n",
      "Epoch: 11470/20000, Loss: 0.00000096\n",
      "Epoch: 11480/20000, Loss: 0.00000096\n",
      "Epoch: 11490/20000, Loss: 0.00000104\n",
      "Epoch: 11500/20000, Loss: 0.00000097\n",
      "Epoch: 11510/20000, Loss: 0.00000094\n",
      "Epoch: 11520/20000, Loss: 0.00000093\n",
      "Epoch: 11530/20000, Loss: 0.00000092\n",
      "Epoch: 11540/20000, Loss: 0.00000091\n",
      "Epoch: 11550/20000, Loss: 0.00000091\n",
      "Epoch: 11560/20000, Loss: 0.00000090\n",
      "Epoch: 11570/20000, Loss: 0.00000089\n",
      "Epoch: 11580/20000, Loss: 0.00000088\n",
      "Epoch: 11590/20000, Loss: 0.00000088\n",
      "Epoch: 11600/20000, Loss: 0.00000087\n",
      "Epoch: 11610/20000, Loss: 0.00000087\n",
      "Epoch: 11620/20000, Loss: 0.00000088\n",
      "Epoch: 11630/20000, Loss: 0.00000089\n",
      "Epoch: 11640/20000, Loss: 0.00000086\n",
      "Epoch: 11650/20000, Loss: 0.00000085\n",
      "Epoch: 11660/20000, Loss: 0.00000083\n",
      "Epoch: 11670/20000, Loss: 0.00000083\n",
      "Epoch: 11680/20000, Loss: 0.00000082\n",
      "Epoch: 11690/20000, Loss: 0.00000081\n",
      "Epoch: 11700/20000, Loss: 0.00000081\n",
      "Epoch: 11710/20000, Loss: 0.00000080\n",
      "Epoch: 11720/20000, Loss: 0.00000079\n",
      "Epoch: 11730/20000, Loss: 0.00000079\n",
      "Epoch: 11740/20000, Loss: 0.00000078\n",
      "Epoch: 11750/20000, Loss: 0.00000077\n",
      "Epoch: 11760/20000, Loss: 0.00000077\n",
      "Epoch: 11770/20000, Loss: 0.00000078\n",
      "Epoch: 11780/20000, Loss: 0.00000077\n",
      "Epoch: 11790/20000, Loss: 0.00000077\n",
      "Epoch: 11800/20000, Loss: 0.00000075\n",
      "Epoch: 11810/20000, Loss: 0.00000074\n",
      "Epoch: 11820/20000, Loss: 0.00000074\n",
      "Epoch: 11830/20000, Loss: 0.00000073\n",
      "Epoch: 11840/20000, Loss: 0.00000072\n",
      "Epoch: 11850/20000, Loss: 0.00000072\n",
      "Epoch: 11860/20000, Loss: 0.00000073\n",
      "Epoch: 11870/20000, Loss: 0.00000072\n",
      "Epoch: 11880/20000, Loss: 0.00000071\n",
      "Epoch: 11890/20000, Loss: 0.00000070\n",
      "Epoch: 11900/20000, Loss: 0.00000069\n",
      "Epoch: 11910/20000, Loss: 0.00000069\n",
      "Epoch: 11920/20000, Loss: 0.00000069\n",
      "Epoch: 11930/20000, Loss: 0.00000071\n",
      "Epoch: 11940/20000, Loss: 0.00000068\n",
      "Epoch: 11950/20000, Loss: 0.00000067\n",
      "Epoch: 11960/20000, Loss: 0.00000067\n",
      "Epoch: 11970/20000, Loss: 0.00000067\n",
      "Epoch: 11980/20000, Loss: 0.00000065\n",
      "Epoch: 11990/20000, Loss: 0.00000065\n",
      "Epoch: 12000/20000, Loss: 0.00000064\n",
      "Epoch: 12010/20000, Loss: 0.00000064\n",
      "Epoch: 12020/20000, Loss: 0.00000065\n",
      "Epoch: 12030/20000, Loss: 0.00000066\n",
      "Epoch: 12040/20000, Loss: 0.00000064\n",
      "Epoch: 12050/20000, Loss: 0.00000062\n",
      "Epoch: 12060/20000, Loss: 0.00000061\n",
      "Epoch: 12070/20000, Loss: 0.00000061\n",
      "Epoch: 12080/20000, Loss: 0.00000061\n",
      "Epoch: 12090/20000, Loss: 0.00000060\n",
      "Epoch: 12100/20000, Loss: 0.00000061\n",
      "Epoch: 12110/20000, Loss: 0.00000063\n",
      "Epoch: 12120/20000, Loss: 0.00000060\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 12130/20000, Loss: 0.00000059\n",
      "Epoch: 12140/20000, Loss: 0.00000058\n",
      "Epoch: 12150/20000, Loss: 0.00000058\n",
      "Epoch: 12160/20000, Loss: 0.00000057\n",
      "Epoch: 12170/20000, Loss: 0.00000057\n",
      "Epoch: 12180/20000, Loss: 0.00000058\n",
      "Epoch: 12190/20000, Loss: 0.00000057\n",
      "Epoch: 12200/20000, Loss: 0.00000056\n",
      "Epoch: 12210/20000, Loss: 0.00000055\n",
      "Epoch: 12220/20000, Loss: 0.00000055\n",
      "Epoch: 12230/20000, Loss: 0.00000054\n",
      "Epoch: 12240/20000, Loss: 0.00000056\n",
      "Epoch: 12250/20000, Loss: 0.00000054\n",
      "Epoch: 12260/20000, Loss: 0.00000054\n",
      "Epoch: 12270/20000, Loss: 0.00000053\n",
      "Epoch: 12280/20000, Loss: 0.00000053\n",
      "Epoch: 12290/20000, Loss: 0.00000053\n",
      "Epoch: 12300/20000, Loss: 0.00000059\n",
      "Epoch: 12310/20000, Loss: 0.00000054\n",
      "Epoch: 12320/20000, Loss: 0.00000052\n",
      "Epoch: 12330/20000, Loss: 0.00000051\n",
      "Epoch: 12340/20000, Loss: 0.00000050\n",
      "Epoch: 12350/20000, Loss: 0.00000050\n",
      "Epoch: 12360/20000, Loss: 0.00000050\n",
      "Epoch: 12370/20000, Loss: 0.00000049\n",
      "Epoch: 12380/20000, Loss: 0.00000049\n",
      "Epoch: 12390/20000, Loss: 0.00000049\n",
      "Epoch: 12400/20000, Loss: 0.00000052\n",
      "Epoch: 12410/20000, Loss: 0.00000050\n",
      "Epoch: 12420/20000, Loss: 0.00000049\n",
      "Epoch: 12430/20000, Loss: 0.00000048\n",
      "Epoch: 12440/20000, Loss: 0.00000047\n",
      "Epoch: 12450/20000, Loss: 0.00000048\n",
      "Epoch: 12460/20000, Loss: 0.00000048\n",
      "Epoch: 12470/20000, Loss: 0.00000047\n",
      "Epoch: 12480/20000, Loss: 0.00000046\n",
      "Epoch: 12490/20000, Loss: 0.00000045\n",
      "Epoch: 12500/20000, Loss: 0.00000045\n",
      "Epoch: 12510/20000, Loss: 0.00000045\n",
      "Epoch: 12520/20000, Loss: 0.00000044\n",
      "Epoch: 12530/20000, Loss: 0.00000044\n",
      "Epoch: 12540/20000, Loss: 0.00000045\n",
      "Epoch: 12550/20000, Loss: 0.00000047\n",
      "Epoch: 12560/20000, Loss: 0.00000045\n",
      "Epoch: 12570/20000, Loss: 0.00000043\n",
      "Epoch: 12580/20000, Loss: 0.00000043\n",
      "Epoch: 12590/20000, Loss: 0.00000043\n",
      "Epoch: 12600/20000, Loss: 0.00000046\n",
      "Epoch: 12610/20000, Loss: 0.00000043\n",
      "Epoch: 12620/20000, Loss: 0.00000042\n",
      "Epoch: 12630/20000, Loss: 0.00000041\n",
      "Epoch: 12640/20000, Loss: 0.00000041\n",
      "Epoch: 12650/20000, Loss: 0.00000043\n",
      "Epoch: 12660/20000, Loss: 0.00000042\n",
      "Epoch: 12670/20000, Loss: 0.00000041\n",
      "Epoch: 12680/20000, Loss: 0.00000040\n",
      "Epoch: 12690/20000, Loss: 0.00000040\n",
      "Epoch: 12700/20000, Loss: 0.00000040\n",
      "Epoch: 12710/20000, Loss: 0.00000041\n",
      "Epoch: 12720/20000, Loss: 0.00000039\n",
      "Epoch: 12730/20000, Loss: 0.00000039\n",
      "Epoch: 12740/20000, Loss: 0.00000039\n",
      "Epoch: 12750/20000, Loss: 0.00000038\n",
      "Epoch: 12760/20000, Loss: 0.00000039\n",
      "Epoch: 12770/20000, Loss: 0.00000040\n",
      "Epoch: 12780/20000, Loss: 0.00000038\n",
      "Epoch: 12790/20000, Loss: 0.00000038\n",
      "Epoch: 12800/20000, Loss: 0.00000037\n",
      "Epoch: 12810/20000, Loss: 0.00000039\n",
      "Epoch: 12820/20000, Loss: 0.00000036\n",
      "Epoch: 12830/20000, Loss: 0.00000036\n",
      "Epoch: 12840/20000, Loss: 0.00000036\n",
      "Epoch: 12850/20000, Loss: 0.00000036\n",
      "Epoch: 12860/20000, Loss: 0.00000036\n",
      "Epoch: 12870/20000, Loss: 0.00000036\n",
      "Epoch: 12880/20000, Loss: 0.00000039\n",
      "Epoch: 12890/20000, Loss: 0.00000037\n",
      "Epoch: 12900/20000, Loss: 0.00000035\n",
      "Epoch: 12910/20000, Loss: 0.00000034\n",
      "Epoch: 12920/20000, Loss: 0.00000034\n",
      "Epoch: 12930/20000, Loss: 0.00000034\n",
      "Epoch: 12940/20000, Loss: 0.00000034\n",
      "Epoch: 12950/20000, Loss: 0.00000033\n",
      "Epoch: 12960/20000, Loss: 0.00000033\n",
      "Epoch: 12970/20000, Loss: 0.00000033\n",
      "Epoch: 12980/20000, Loss: 0.00000037\n",
      "Epoch: 12990/20000, Loss: 0.00000034\n",
      "Epoch: 13000/20000, Loss: 0.00000033\n",
      "Epoch: 13010/20000, Loss: 0.00000033\n",
      "Epoch: 13020/20000, Loss: 0.00000032\n",
      "Epoch: 13030/20000, Loss: 0.00000032\n",
      "Epoch: 13040/20000, Loss: 0.00000032\n",
      "Epoch: 13050/20000, Loss: 0.00000033\n",
      "Epoch: 13060/20000, Loss: 0.00000032\n",
      "Epoch: 13070/20000, Loss: 0.00000032\n",
      "Epoch: 13080/20000, Loss: 0.00000031\n",
      "Epoch: 13090/20000, Loss: 0.00000031\n",
      "Epoch: 13100/20000, Loss: 0.00000030\n",
      "Epoch: 13110/20000, Loss: 0.00000030\n",
      "Epoch: 13120/20000, Loss: 0.00000031\n",
      "Epoch: 13130/20000, Loss: 0.00000041\n",
      "Epoch: 13140/20000, Loss: 0.00000031\n",
      "Epoch: 13150/20000, Loss: 0.00000030\n",
      "Epoch: 13160/20000, Loss: 0.00000030\n",
      "Epoch: 13170/20000, Loss: 0.00000029\n",
      "Epoch: 13180/20000, Loss: 0.00000029\n",
      "Epoch: 13190/20000, Loss: 0.00000029\n",
      "Epoch: 13200/20000, Loss: 0.00000029\n",
      "Epoch: 13210/20000, Loss: 0.00000028\n",
      "Epoch: 13220/20000, Loss: 0.00000029\n",
      "Epoch: 13230/20000, Loss: 0.00000034\n",
      "Epoch: 13240/20000, Loss: 0.00000030\n",
      "Epoch: 13250/20000, Loss: 0.00000028\n",
      "Epoch: 13260/20000, Loss: 0.00000028\n",
      "Epoch: 13270/20000, Loss: 0.00000027\n",
      "Epoch: 13280/20000, Loss: 0.00000027\n",
      "Epoch: 13290/20000, Loss: 0.00000027\n",
      "Epoch: 13300/20000, Loss: 0.00000027\n",
      "Epoch: 13310/20000, Loss: 0.00000027\n",
      "Epoch: 13320/20000, Loss: 0.00000041\n",
      "Epoch: 13330/20000, Loss: 0.00000027\n",
      "Epoch: 13340/20000, Loss: 0.00000028\n",
      "Epoch: 13350/20000, Loss: 0.00000026\n",
      "Epoch: 13360/20000, Loss: 0.00000026\n",
      "Epoch: 13370/20000, Loss: 0.00000026\n",
      "Epoch: 13380/20000, Loss: 0.00000028\n",
      "Epoch: 13390/20000, Loss: 0.00000026\n",
      "Epoch: 13400/20000, Loss: 0.00000025\n",
      "Epoch: 13410/20000, Loss: 0.00000025\n",
      "Epoch: 13420/20000, Loss: 0.00000025\n",
      "Epoch: 13430/20000, Loss: 0.00000025\n",
      "Epoch: 13440/20000, Loss: 0.00000025\n",
      "Epoch: 13450/20000, Loss: 0.00000025\n",
      "Epoch: 13460/20000, Loss: 0.00000024\n",
      "Epoch: 13470/20000, Loss: 0.00000024\n",
      "Epoch: 13480/20000, Loss: 0.00000024\n",
      "Epoch: 13490/20000, Loss: 0.00000029\n",
      "Epoch: 13500/20000, Loss: 0.00000026\n",
      "Epoch: 13510/20000, Loss: 0.00000025\n",
      "Epoch: 13520/20000, Loss: 0.00000024\n",
      "Epoch: 13530/20000, Loss: 0.00000024\n",
      "Epoch: 13540/20000, Loss: 0.00000024\n",
      "Epoch: 13550/20000, Loss: 0.00000025\n",
      "Epoch: 13560/20000, Loss: 0.00000023\n",
      "Epoch: 13570/20000, Loss: 0.00000023\n",
      "Epoch: 13580/20000, Loss: 0.00000023\n",
      "Epoch: 13590/20000, Loss: 0.00000023\n",
      "Epoch: 13600/20000, Loss: 0.00000023\n",
      "Epoch: 13610/20000, Loss: 0.00000027\n",
      "Epoch: 13620/20000, Loss: 0.00000024\n",
      "Epoch: 13630/20000, Loss: 0.00000023\n",
      "Epoch: 13640/20000, Loss: 0.00000022\n",
      "Epoch: 13650/20000, Loss: 0.00000022\n",
      "Epoch: 13660/20000, Loss: 0.00000022\n",
      "Epoch: 13670/20000, Loss: 0.00000022\n",
      "Epoch: 13680/20000, Loss: 0.00000022\n",
      "Epoch: 13690/20000, Loss: 0.00000021\n",
      "Epoch: 13700/20000, Loss: 0.00000021\n",
      "Epoch: 13710/20000, Loss: 0.00000022\n",
      "Epoch: 13720/20000, Loss: 0.00000027\n",
      "Epoch: 13730/20000, Loss: 0.00000024\n",
      "Epoch: 13740/20000, Loss: 0.00000028\n",
      "Epoch: 13750/20000, Loss: 0.00000022\n",
      "Epoch: 13760/20000, Loss: 0.00000021\n",
      "Epoch: 13770/20000, Loss: 0.00000021\n",
      "Epoch: 13780/20000, Loss: 0.00000020\n",
      "Epoch: 13790/20000, Loss: 0.00000020\n",
      "Epoch: 13800/20000, Loss: 0.00000020\n",
      "Epoch: 13810/20000, Loss: 0.00000020\n",
      "Epoch: 13820/20000, Loss: 0.00000020\n",
      "Epoch: 13830/20000, Loss: 0.00000020\n",
      "Epoch: 13840/20000, Loss: 0.00000020\n",
      "Epoch: 13850/20000, Loss: 0.00000020\n",
      "Epoch: 13860/20000, Loss: 0.00000026\n",
      "Epoch: 13870/20000, Loss: 0.00000021\n",
      "Epoch: 13880/20000, Loss: 0.00000021\n",
      "Epoch: 13890/20000, Loss: 0.00000020\n",
      "Epoch: 13900/20000, Loss: 0.00000019\n",
      "Epoch: 13910/20000, Loss: 0.00000019\n",
      "Epoch: 13920/20000, Loss: 0.00000019\n",
      "Epoch: 13930/20000, Loss: 0.00000019\n",
      "Epoch: 13940/20000, Loss: 0.00000019\n",
      "Epoch: 13950/20000, Loss: 0.00000019\n",
      "Epoch: 13960/20000, Loss: 0.00000026\n",
      "Epoch: 13970/20000, Loss: 0.00000020\n",
      "Epoch: 13980/20000, Loss: 0.00000019\n",
      "Epoch: 13990/20000, Loss: 0.00000018\n",
      "Epoch: 14000/20000, Loss: 0.00000018\n",
      "Epoch: 14010/20000, Loss: 0.00000018\n",
      "Epoch: 14020/20000, Loss: 0.00000018\n",
      "Epoch: 14030/20000, Loss: 0.00000021\n",
      "Epoch: 14040/20000, Loss: 0.00000018\n",
      "Epoch: 14050/20000, Loss: 0.00000020\n",
      "Epoch: 14060/20000, Loss: 0.00000017\n",
      "Epoch: 14070/20000, Loss: 0.00000018\n",
      "Epoch: 14080/20000, Loss: 0.00000017\n",
      "Epoch: 14090/20000, Loss: 0.00000017\n",
      "Epoch: 14100/20000, Loss: 0.00000020\n",
      "Epoch: 14110/20000, Loss: 0.00000018\n",
      "Epoch: 14120/20000, Loss: 0.00000017\n",
      "Epoch: 14130/20000, Loss: 0.00000017\n",
      "Epoch: 14140/20000, Loss: 0.00000017\n",
      "Epoch: 14150/20000, Loss: 0.00000017\n",
      "Epoch: 14160/20000, Loss: 0.00000017\n",
      "Epoch: 14170/20000, Loss: 0.00000016\n",
      "Epoch: 14180/20000, Loss: 0.00000016\n",
      "Epoch: 14190/20000, Loss: 0.00000016\n",
      "Epoch: 14200/20000, Loss: 0.00000018\n",
      "Epoch: 14210/20000, Loss: 0.00000024\n",
      "Epoch: 14220/20000, Loss: 0.00000018\n",
      "Epoch: 14230/20000, Loss: 0.00000016\n",
      "Epoch: 14240/20000, Loss: 0.00000016\n",
      "Epoch: 14250/20000, Loss: 0.00000016\n",
      "Epoch: 14260/20000, Loss: 0.00000016\n",
      "Epoch: 14270/20000, Loss: 0.00000016\n",
      "Epoch: 14280/20000, Loss: 0.00000016\n",
      "Epoch: 14290/20000, Loss: 0.00000015\n",
      "Epoch: 14300/20000, Loss: 0.00000015\n",
      "Epoch: 14310/20000, Loss: 0.00000017\n",
      "Epoch: 14320/20000, Loss: 0.00000017\n",
      "Epoch: 14330/20000, Loss: 0.00000016\n",
      "Epoch: 14340/20000, Loss: 0.00000016\n",
      "Epoch: 14350/20000, Loss: 0.00000015\n",
      "Epoch: 14360/20000, Loss: 0.00000015\n",
      "Epoch: 14370/20000, Loss: 0.00000015\n",
      "Epoch: 14380/20000, Loss: 0.00000020\n",
      "Epoch: 14390/20000, Loss: 0.00000015\n",
      "Epoch: 14400/20000, Loss: 0.00000015\n",
      "Epoch: 14410/20000, Loss: 0.00000015\n",
      "Epoch: 14420/20000, Loss: 0.00000015\n",
      "Epoch: 14430/20000, Loss: 0.00000014\n",
      "Epoch: 14440/20000, Loss: 0.00000014\n",
      "Epoch: 14450/20000, Loss: 0.00000014\n",
      "Epoch: 14460/20000, Loss: 0.00000016\n",
      "Epoch: 14470/20000, Loss: 0.00000017\n",
      "Epoch: 14480/20000, Loss: 0.00000015\n",
      "Epoch: 14490/20000, Loss: 0.00000014\n",
      "Epoch: 14500/20000, Loss: 0.00000014\n",
      "Epoch: 14510/20000, Loss: 0.00000014\n",
      "Epoch: 14520/20000, Loss: 0.00000015\n",
      "Epoch: 14530/20000, Loss: 0.00000014\n",
      "Epoch: 14540/20000, Loss: 0.00000014\n",
      "Epoch: 14550/20000, Loss: 0.00000014\n",
      "Epoch: 14560/20000, Loss: 0.00000014\n",
      "Epoch: 14570/20000, Loss: 0.00000014\n",
      "Epoch: 14580/20000, Loss: 0.00000014\n",
      "Epoch: 14590/20000, Loss: 0.00000024\n",
      "Epoch: 14600/20000, Loss: 0.00000016\n",
      "Epoch: 14610/20000, Loss: 0.00000014\n",
      "Epoch: 14620/20000, Loss: 0.00000014\n",
      "Epoch: 14630/20000, Loss: 0.00000013\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 14640/20000, Loss: 0.00000013\n",
      "Epoch: 14650/20000, Loss: 0.00000013\n",
      "Epoch: 14660/20000, Loss: 0.00000013\n",
      "Epoch: 14670/20000, Loss: 0.00000013\n",
      "Epoch: 14680/20000, Loss: 0.00000015\n",
      "Epoch: 14690/20000, Loss: 0.00000015\n",
      "Epoch: 14700/20000, Loss: 0.00000013\n",
      "Epoch: 14710/20000, Loss: 0.00000013\n",
      "Epoch: 14720/20000, Loss: 0.00000013\n",
      "Epoch: 14730/20000, Loss: 0.00000013\n",
      "Epoch: 14740/20000, Loss: 0.00000013\n",
      "Epoch: 14750/20000, Loss: 0.00000015\n",
      "Epoch: 14760/20000, Loss: 0.00000012\n",
      "Epoch: 14770/20000, Loss: 0.00000013\n",
      "Epoch: 14780/20000, Loss: 0.00000012\n",
      "Epoch: 14790/20000, Loss: 0.00000012\n",
      "Epoch: 14800/20000, Loss: 0.00000012\n",
      "Epoch: 14810/20000, Loss: 0.00000014\n",
      "Epoch: 14820/20000, Loss: 0.00000020\n",
      "Epoch: 14830/20000, Loss: 0.00000014\n",
      "Epoch: 14840/20000, Loss: 0.00000012\n",
      "Epoch: 14850/20000, Loss: 0.00000012\n",
      "Epoch: 14860/20000, Loss: 0.00000012\n",
      "Epoch: 14870/20000, Loss: 0.00000012\n",
      "Epoch: 14880/20000, Loss: 0.00000012\n",
      "Epoch: 14890/20000, Loss: 0.00000012\n",
      "Epoch: 14900/20000, Loss: 0.00000017\n",
      "Epoch: 14910/20000, Loss: 0.00000012\n",
      "Epoch: 14920/20000, Loss: 0.00000012\n",
      "Epoch: 14930/20000, Loss: 0.00000012\n",
      "Epoch: 14940/20000, Loss: 0.00000012\n",
      "Epoch: 14950/20000, Loss: 0.00000016\n",
      "Epoch: 14960/20000, Loss: 0.00000013\n",
      "Epoch: 14970/20000, Loss: 0.00000012\n",
      "Epoch: 14980/20000, Loss: 0.00000011\n",
      "Epoch: 14990/20000, Loss: 0.00000011\n",
      "Epoch: 15000/20000, Loss: 0.00000011\n",
      "Epoch: 15010/20000, Loss: 0.00000011\n",
      "Epoch: 15020/20000, Loss: 0.00000020\n",
      "Epoch: 15030/20000, Loss: 0.00000016\n",
      "Epoch: 15040/20000, Loss: 0.00000012\n",
      "Epoch: 15050/20000, Loss: 0.00000011\n",
      "Epoch: 15060/20000, Loss: 0.00000012\n",
      "Epoch: 15070/20000, Loss: 0.00000013\n",
      "Epoch: 15080/20000, Loss: 0.00000011\n",
      "Epoch: 15090/20000, Loss: 0.00000011\n",
      "Epoch: 15100/20000, Loss: 0.00000011\n",
      "Epoch: 15110/20000, Loss: 0.00000011\n",
      "Epoch: 15120/20000, Loss: 0.00000010\n",
      "Epoch: 15130/20000, Loss: 0.00000010\n",
      "Epoch: 15140/20000, Loss: 0.00000010\n",
      "Epoch: 15150/20000, Loss: 0.00000010\n",
      "Epoch: 15160/20000, Loss: 0.00000017\n",
      "Epoch: 15170/20000, Loss: 0.00000015\n",
      "Epoch: 15180/20000, Loss: 0.00000011\n",
      "Epoch: 15190/20000, Loss: 0.00000011\n",
      "Epoch: 15200/20000, Loss: 0.00000010\n",
      "Epoch: 15210/20000, Loss: 0.00000012\n",
      "Epoch: 15220/20000, Loss: 0.00000014\n",
      "Epoch: 15230/20000, Loss: 0.00000011\n",
      "Epoch: 15240/20000, Loss: 0.00000011\n",
      "Epoch: 15250/20000, Loss: 0.00000010\n",
      "Epoch: 15260/20000, Loss: 0.00000010\n",
      "Epoch: 15270/20000, Loss: 0.00000010\n",
      "Epoch: 15280/20000, Loss: 0.00000010\n",
      "Epoch: 15290/20000, Loss: 0.00000010\n",
      "Epoch: 15300/20000, Loss: 0.00000010\n",
      "Epoch: 15310/20000, Loss: 0.00000010\n",
      "Epoch: 15320/20000, Loss: 0.00000015\n",
      "Epoch: 15330/20000, Loss: 0.00000010\n",
      "Epoch: 15340/20000, Loss: 0.00000010\n",
      "Epoch: 15350/20000, Loss: 0.00000010\n",
      "Epoch: 15360/20000, Loss: 0.00000010\n",
      "Epoch: 15370/20000, Loss: 0.00000012\n",
      "Epoch: 15380/20000, Loss: 0.00000011\n",
      "Epoch: 15390/20000, Loss: 0.00000010\n",
      "Epoch: 15400/20000, Loss: 0.00000009\n",
      "Epoch: 15410/20000, Loss: 0.00000009\n",
      "Epoch: 15420/20000, Loss: 0.00000009\n",
      "Epoch: 15430/20000, Loss: 0.00000009\n",
      "Epoch: 15440/20000, Loss: 0.00000010\n",
      "Epoch: 15450/20000, Loss: 0.00000016\n",
      "Epoch: 15460/20000, Loss: 0.00000011\n",
      "Epoch: 15470/20000, Loss: 0.00000010\n",
      "Epoch: 15480/20000, Loss: 0.00000010\n",
      "Epoch: 15490/20000, Loss: 0.00000009\n",
      "Epoch: 15500/20000, Loss: 0.00000010\n",
      "Epoch: 15510/20000, Loss: 0.00000019\n",
      "Epoch: 15520/20000, Loss: 0.00000011\n",
      "Epoch: 15530/20000, Loss: 0.00000009\n",
      "Epoch: 15540/20000, Loss: 0.00000009\n",
      "Epoch: 15550/20000, Loss: 0.00000009\n",
      "Epoch: 15560/20000, Loss: 0.00000009\n",
      "Epoch: 15570/20000, Loss: 0.00000009\n",
      "Epoch: 15580/20000, Loss: 0.00000009\n",
      "Epoch: 15590/20000, Loss: 0.00000009\n",
      "Epoch: 15600/20000, Loss: 0.00000010\n",
      "Epoch: 15610/20000, Loss: 0.00000014\n",
      "Epoch: 15620/20000, Loss: 0.00000009\n",
      "Epoch: 15630/20000, Loss: 0.00000010\n",
      "Epoch: 15640/20000, Loss: 0.00000009\n",
      "Epoch: 15650/20000, Loss: 0.00000009\n",
      "Epoch: 15660/20000, Loss: 0.00000009\n",
      "Epoch: 15670/20000, Loss: 0.00000010\n",
      "Epoch: 15680/20000, Loss: 0.00000015\n",
      "Epoch: 15690/20000, Loss: 0.00000010\n",
      "Epoch: 15700/20000, Loss: 0.00000008\n",
      "Epoch: 15710/20000, Loss: 0.00000008\n",
      "Epoch: 15720/20000, Loss: 0.00000008\n",
      "Epoch: 15730/20000, Loss: 0.00000008\n",
      "Epoch: 15740/20000, Loss: 0.00000008\n",
      "Epoch: 15750/20000, Loss: 0.00000008\n",
      "Epoch: 15760/20000, Loss: 0.00000008\n",
      "Epoch: 15770/20000, Loss: 0.00000008\n",
      "Epoch: 15780/20000, Loss: 0.00000008\n",
      "Epoch: 15790/20000, Loss: 0.00000008\n",
      "Epoch: 15800/20000, Loss: 0.00000017\n",
      "Epoch: 15810/20000, Loss: 0.00000015\n",
      "Epoch: 15820/20000, Loss: 0.00000012\n",
      "Epoch: 15830/20000, Loss: 0.00000010\n",
      "Epoch: 15840/20000, Loss: 0.00000008\n",
      "Epoch: 15850/20000, Loss: 0.00000008\n",
      "Epoch: 15860/20000, Loss: 0.00000008\n",
      "Epoch: 15870/20000, Loss: 0.00000008\n",
      "Epoch: 15880/20000, Loss: 0.00000008\n",
      "Epoch: 15890/20000, Loss: 0.00000008\n",
      "Epoch: 15900/20000, Loss: 0.00000008\n",
      "Epoch: 15910/20000, Loss: 0.00000010\n",
      "Epoch: 15920/20000, Loss: 0.00000010\n",
      "Epoch: 15930/20000, Loss: 0.00000008\n",
      "Epoch: 15940/20000, Loss: 0.00000008\n",
      "Epoch: 15950/20000, Loss: 0.00000008\n",
      "Epoch: 15960/20000, Loss: 0.00000008\n",
      "Epoch: 15970/20000, Loss: 0.00000008\n",
      "Epoch: 15980/20000, Loss: 0.00000008\n",
      "Epoch: 15990/20000, Loss: 0.00000008\n",
      "Epoch: 16000/20000, Loss: 0.00000007\n",
      "Epoch: 16010/20000, Loss: 0.00000007\n",
      "Epoch: 16020/20000, Loss: 0.00000008\n",
      "Epoch: 16030/20000, Loss: 0.00000020\n",
      "Epoch: 16040/20000, Loss: 0.00000010\n",
      "Epoch: 16050/20000, Loss: 0.00000012\n",
      "Epoch: 16060/20000, Loss: 0.00000008\n",
      "Epoch: 16070/20000, Loss: 0.00000007\n",
      "Epoch: 16080/20000, Loss: 0.00000007\n",
      "Epoch: 16090/20000, Loss: 0.00000007\n",
      "Epoch: 16100/20000, Loss: 0.00000007\n",
      "Epoch: 16110/20000, Loss: 0.00000007\n",
      "Epoch: 16120/20000, Loss: 0.00000007\n",
      "Epoch: 16130/20000, Loss: 0.00000008\n",
      "Epoch: 16140/20000, Loss: 0.00000014\n",
      "Epoch: 16150/20000, Loss: 0.00000009\n",
      "Epoch: 16160/20000, Loss: 0.00000008\n",
      "Epoch: 16170/20000, Loss: 0.00000007\n",
      "Epoch: 16180/20000, Loss: 0.00000007\n",
      "Epoch: 16190/20000, Loss: 0.00000007\n",
      "Epoch: 16200/20000, Loss: 0.00000007\n",
      "Epoch: 16210/20000, Loss: 0.00000008\n",
      "Epoch: 16220/20000, Loss: 0.00000016\n",
      "Epoch: 16230/20000, Loss: 0.00000008\n",
      "Epoch: 16240/20000, Loss: 0.00000007\n",
      "Epoch: 16250/20000, Loss: 0.00000007\n",
      "Epoch: 16260/20000, Loss: 0.00000007\n",
      "Epoch: 16270/20000, Loss: 0.00000009\n",
      "Epoch: 16280/20000, Loss: 0.00000008\n",
      "Epoch: 16290/20000, Loss: 0.00000007\n",
      "Epoch: 16300/20000, Loss: 0.00000007\n",
      "Epoch: 16310/20000, Loss: 0.00000007\n",
      "Epoch: 16320/20000, Loss: 0.00000007\n",
      "Epoch: 16330/20000, Loss: 0.00000007\n",
      "Epoch: 16340/20000, Loss: 0.00000007\n",
      "Epoch: 16350/20000, Loss: 0.00000007\n",
      "Epoch: 16360/20000, Loss: 0.00000007\n",
      "Epoch: 16370/20000, Loss: 0.00000007\n",
      "Epoch: 16380/20000, Loss: 0.00000007\n",
      "Epoch: 16390/20000, Loss: 0.00000018\n",
      "Epoch: 16400/20000, Loss: 0.00000011\n",
      "Epoch: 16410/20000, Loss: 0.00000008\n",
      "Epoch: 16420/20000, Loss: 0.00000008\n",
      "Epoch: 16430/20000, Loss: 0.00000009\n",
      "Epoch: 16440/20000, Loss: 0.00000007\n",
      "Epoch: 16450/20000, Loss: 0.00000007\n",
      "Epoch: 16460/20000, Loss: 0.00000006\n",
      "Epoch: 16470/20000, Loss: 0.00000007\n",
      "Epoch: 16480/20000, Loss: 0.00000007\n",
      "Epoch: 16490/20000, Loss: 0.00000008\n",
      "Epoch: 16500/20000, Loss: 0.00000008\n",
      "Epoch: 16510/20000, Loss: 0.00000007\n",
      "Epoch: 16520/20000, Loss: 0.00000006\n",
      "Epoch: 16530/20000, Loss: 0.00000006\n",
      "Epoch: 16540/20000, Loss: 0.00000006\n",
      "Epoch: 16550/20000, Loss: 0.00000008\n",
      "Epoch: 16560/20000, Loss: 0.00000012\n",
      "Epoch: 16570/20000, Loss: 0.00000009\n",
      "Epoch: 16580/20000, Loss: 0.00000012\n",
      "Epoch: 16590/20000, Loss: 0.00000008\n",
      "Epoch: 16600/20000, Loss: 0.00000007\n",
      "Epoch: 16610/20000, Loss: 0.00000006\n",
      "Epoch: 16620/20000, Loss: 0.00000006\n",
      "Epoch: 16630/20000, Loss: 0.00000006\n",
      "Epoch: 16640/20000, Loss: 0.00000006\n",
      "Epoch: 16650/20000, Loss: 0.00000006\n",
      "Epoch: 16660/20000, Loss: 0.00000006\n",
      "Epoch: 16670/20000, Loss: 0.00000007\n",
      "Epoch: 16680/20000, Loss: 0.00000014\n",
      "Epoch: 16690/20000, Loss: 0.00000011\n",
      "Epoch: 16700/20000, Loss: 0.00000009\n",
      "Epoch: 16710/20000, Loss: 0.00000007\n",
      "Epoch: 16720/20000, Loss: 0.00000006\n",
      "Epoch: 16730/20000, Loss: 0.00000006\n",
      "Epoch: 16740/20000, Loss: 0.00000006\n",
      "Epoch: 16750/20000, Loss: 0.00000006\n",
      "Epoch: 16760/20000, Loss: 0.00000006\n",
      "Epoch: 16770/20000, Loss: 0.00000006\n",
      "Epoch: 16780/20000, Loss: 0.00000006\n",
      "Epoch: 16790/20000, Loss: 0.00000006\n",
      "Epoch: 16800/20000, Loss: 0.00000006\n",
      "Epoch: 16810/20000, Loss: 0.00000007\n",
      "Epoch: 16820/20000, Loss: 0.00000027\n",
      "Epoch: 16830/20000, Loss: 0.00000011\n",
      "Epoch: 16840/20000, Loss: 0.00000007\n",
      "Epoch: 16850/20000, Loss: 0.00000006\n",
      "Epoch: 16860/20000, Loss: 0.00000006\n",
      "Epoch: 16870/20000, Loss: 0.00000006\n",
      "Epoch: 16880/20000, Loss: 0.00000006\n",
      "Epoch: 16890/20000, Loss: 0.00000006\n",
      "Epoch: 16900/20000, Loss: 0.00000006\n",
      "Epoch: 16910/20000, Loss: 0.00000006\n",
      "Epoch: 16920/20000, Loss: 0.00000006\n",
      "Epoch: 16930/20000, Loss: 0.00000007\n",
      "Epoch: 16940/20000, Loss: 0.00000012\n",
      "Epoch: 16950/20000, Loss: 0.00000006\n",
      "Epoch: 16960/20000, Loss: 0.00000006\n",
      "Epoch: 16970/20000, Loss: 0.00000006\n",
      "Epoch: 16980/20000, Loss: 0.00000006\n",
      "Epoch: 16990/20000, Loss: 0.00000006\n",
      "Epoch: 17000/20000, Loss: 0.00000005\n",
      "Epoch: 17010/20000, Loss: 0.00000006\n",
      "Epoch: 17020/20000, Loss: 0.00000006\n",
      "Epoch: 17030/20000, Loss: 0.00000013\n",
      "Epoch: 17040/20000, Loss: 0.00000007\n",
      "Epoch: 17050/20000, Loss: 0.00000006\n",
      "Epoch: 17060/20000, Loss: 0.00000006\n",
      "Epoch: 17070/20000, Loss: 0.00000006\n",
      "Epoch: 17080/20000, Loss: 0.00000005\n",
      "Epoch: 17090/20000, Loss: 0.00000006\n",
      "Epoch: 17100/20000, Loss: 0.00000012\n",
      "Epoch: 17110/20000, Loss: 0.00000006\n",
      "Epoch: 17120/20000, Loss: 0.00000006\n",
      "Epoch: 17130/20000, Loss: 0.00000005\n",
      "Epoch: 17140/20000, Loss: 0.00000005\n",
      "Epoch: 17150/20000, Loss: 0.00000005\n",
      "Epoch: 17160/20000, Loss: 0.00000005\n",
      "Epoch: 17170/20000, Loss: 0.00000010\n",
      "Epoch: 17180/20000, Loss: 0.00000006\n",
      "Epoch: 17190/20000, Loss: 0.00000008\n",
      "Epoch: 17200/20000, Loss: 0.00000005\n",
      "Epoch: 17210/20000, Loss: 0.00000006\n",
      "Epoch: 17220/20000, Loss: 0.00000005\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 17230/20000, Loss: 0.00000007\n",
      "Epoch: 17240/20000, Loss: 0.00000010\n",
      "Epoch: 17250/20000, Loss: 0.00000006\n",
      "Epoch: 17260/20000, Loss: 0.00000005\n",
      "Epoch: 17270/20000, Loss: 0.00000005\n",
      "Epoch: 17280/20000, Loss: 0.00000005\n",
      "Epoch: 17290/20000, Loss: 0.00000005\n",
      "Epoch: 17300/20000, Loss: 0.00000005\n",
      "Epoch: 17310/20000, Loss: 0.00000005\n",
      "Epoch: 17320/20000, Loss: 0.00000005\n",
      "Epoch: 17330/20000, Loss: 0.00000005\n",
      "Epoch: 17340/20000, Loss: 0.00000005\n",
      "Epoch: 17350/20000, Loss: 0.00000005\n",
      "Epoch: 17360/20000, Loss: 0.00000005\n",
      "Epoch: 17370/20000, Loss: 0.00000007\n",
      "Epoch: 17380/20000, Loss: 0.00000009\n",
      "Epoch: 17390/20000, Loss: 0.00000012\n",
      "Epoch: 17400/20000, Loss: 0.00000007\n",
      "Epoch: 17410/20000, Loss: 0.00000006\n",
      "Epoch: 17420/20000, Loss: 0.00000005\n",
      "Epoch: 17430/20000, Loss: 0.00000005\n",
      "Epoch: 17440/20000, Loss: 0.00000005\n",
      "Epoch: 17450/20000, Loss: 0.00000005\n",
      "Epoch: 17460/20000, Loss: 0.00000005\n",
      "Epoch: 17470/20000, Loss: 0.00000005\n",
      "Epoch: 17480/20000, Loss: 0.00000005\n",
      "Epoch: 17490/20000, Loss: 0.00000005\n",
      "Epoch: 17500/20000, Loss: 0.00000009\n",
      "Epoch: 17510/20000, Loss: 0.00000005\n",
      "Epoch: 17520/20000, Loss: 0.00000007\n",
      "Epoch: 17530/20000, Loss: 0.00000005\n",
      "Epoch: 17540/20000, Loss: 0.00000005\n",
      "Epoch: 17550/20000, Loss: 0.00000005\n",
      "Epoch: 17560/20000, Loss: 0.00000005\n",
      "Epoch: 17570/20000, Loss: 0.00000005\n",
      "Epoch: 17580/20000, Loss: 0.00000005\n",
      "Epoch: 17590/20000, Loss: 0.00000005\n",
      "Epoch: 17600/20000, Loss: 0.00000007\n",
      "Epoch: 17610/20000, Loss: 0.00000007\n",
      "Epoch: 17620/20000, Loss: 0.00000007\n",
      "Epoch: 17630/20000, Loss: 0.00000005\n",
      "Epoch: 17640/20000, Loss: 0.00000005\n",
      "Epoch: 17650/20000, Loss: 0.00000005\n",
      "Epoch: 17660/20000, Loss: 0.00000005\n",
      "Epoch: 17670/20000, Loss: 0.00000005\n",
      "Epoch: 17680/20000, Loss: 0.00000005\n",
      "Epoch: 17690/20000, Loss: 0.00000008\n",
      "Epoch: 17700/20000, Loss: 0.00000006\n",
      "Epoch: 17710/20000, Loss: 0.00000005\n",
      "Epoch: 17720/20000, Loss: 0.00000005\n",
      "Epoch: 17730/20000, Loss: 0.00000005\n",
      "Epoch: 17740/20000, Loss: 0.00000005\n",
      "Epoch: 17750/20000, Loss: 0.00000005\n",
      "Epoch: 17760/20000, Loss: 0.00000005\n",
      "Epoch: 17770/20000, Loss: 0.00000005\n",
      "Epoch: 17780/20000, Loss: 0.00000004\n",
      "Epoch: 17790/20000, Loss: 0.00000004\n",
      "Epoch: 17800/20000, Loss: 0.00000005\n",
      "Epoch: 17810/20000, Loss: 0.00000007\n",
      "Epoch: 17820/20000, Loss: 0.00000007\n",
      "Epoch: 17830/20000, Loss: 0.00000008\n",
      "Epoch: 17840/20000, Loss: 0.00000005\n",
      "Epoch: 17850/20000, Loss: 0.00000005\n",
      "Epoch: 17860/20000, Loss: 0.00000005\n",
      "Epoch: 17870/20000, Loss: 0.00000008\n",
      "Epoch: 17880/20000, Loss: 0.00000005\n",
      "Epoch: 17890/20000, Loss: 0.00000005\n",
      "Epoch: 17900/20000, Loss: 0.00000005\n",
      "Epoch: 17910/20000, Loss: 0.00000004\n",
      "Epoch: 17920/20000, Loss: 0.00000004\n",
      "Epoch: 17930/20000, Loss: 0.00000004\n",
      "Epoch: 17940/20000, Loss: 0.00000004\n",
      "Epoch: 17950/20000, Loss: 0.00000004\n",
      "Epoch: 17960/20000, Loss: 0.00000006\n",
      "Epoch: 17970/20000, Loss: 0.00000011\n",
      "Epoch: 17980/20000, Loss: 0.00000006\n",
      "Epoch: 17990/20000, Loss: 0.00000005\n",
      "Epoch: 18000/20000, Loss: 0.00000005\n",
      "Epoch: 18010/20000, Loss: 0.00000005\n",
      "Epoch: 18020/20000, Loss: 0.00000008\n",
      "Epoch: 18030/20000, Loss: 0.00000005\n",
      "Epoch: 18040/20000, Loss: 0.00000005\n",
      "Epoch: 18050/20000, Loss: 0.00000005\n",
      "Epoch: 18060/20000, Loss: 0.00000004\n",
      "Epoch: 18070/20000, Loss: 0.00000004\n",
      "Epoch: 18080/20000, Loss: 0.00000005\n",
      "Epoch: 18090/20000, Loss: 0.00000011\n",
      "Epoch: 18100/20000, Loss: 0.00000006\n",
      "Epoch: 18110/20000, Loss: 0.00000006\n",
      "Epoch: 18120/20000, Loss: 0.00000005\n",
      "Epoch: 18130/20000, Loss: 0.00000004\n",
      "Epoch: 18140/20000, Loss: 0.00000004\n",
      "Epoch: 18150/20000, Loss: 0.00000004\n",
      "Epoch: 18160/20000, Loss: 0.00000008\n",
      "Epoch: 18170/20000, Loss: 0.00000005\n",
      "Epoch: 18180/20000, Loss: 0.00000006\n",
      "Epoch: 18190/20000, Loss: 0.00000005\n",
      "Epoch: 18200/20000, Loss: 0.00000004\n",
      "Epoch: 18210/20000, Loss: 0.00000004\n",
      "Epoch: 18220/20000, Loss: 0.00000004\n",
      "Epoch: 18230/20000, Loss: 0.00000004\n",
      "Epoch: 18240/20000, Loss: 0.00000004\n",
      "Epoch: 18250/20000, Loss: 0.00000006\n",
      "Epoch: 18260/20000, Loss: 0.00000015\n",
      "Epoch: 18270/20000, Loss: 0.00000004\n",
      "Epoch: 18280/20000, Loss: 0.00000006\n",
      "Epoch: 18290/20000, Loss: 0.00000004\n",
      "Epoch: 18300/20000, Loss: 0.00000004\n",
      "Epoch: 18310/20000, Loss: 0.00000004\n",
      "Epoch: 18320/20000, Loss: 0.00000004\n",
      "Epoch: 18330/20000, Loss: 0.00000004\n",
      "Epoch: 18340/20000, Loss: 0.00000004\n",
      "Epoch: 18350/20000, Loss: 0.00000004\n",
      "Epoch: 18360/20000, Loss: 0.00000008\n",
      "Epoch: 18370/20000, Loss: 0.00000004\n",
      "Epoch: 18380/20000, Loss: 0.00000005\n",
      "Epoch: 18390/20000, Loss: 0.00000005\n",
      "Epoch: 18400/20000, Loss: 0.00000004\n",
      "Epoch: 18410/20000, Loss: 0.00000004\n",
      "Epoch: 18420/20000, Loss: 0.00000004\n",
      "Epoch: 18430/20000, Loss: 0.00000004\n",
      "Epoch: 18440/20000, Loss: 0.00000004\n",
      "Epoch: 18450/20000, Loss: 0.00000004\n",
      "Epoch: 18460/20000, Loss: 0.00000004\n",
      "Epoch: 18470/20000, Loss: 0.00000010\n",
      "Epoch: 18480/20000, Loss: 0.00000005\n",
      "Epoch: 18490/20000, Loss: 0.00000007\n",
      "Epoch: 18500/20000, Loss: 0.00000004\n",
      "Epoch: 18510/20000, Loss: 0.00000004\n",
      "Epoch: 18520/20000, Loss: 0.00000004\n",
      "Epoch: 18530/20000, Loss: 0.00000004\n",
      "Epoch: 18540/20000, Loss: 0.00000007\n",
      "Epoch: 18550/20000, Loss: 0.00000005\n",
      "Epoch: 18560/20000, Loss: 0.00000004\n",
      "Epoch: 18570/20000, Loss: 0.00000004\n",
      "Epoch: 18580/20000, Loss: 0.00000004\n",
      "Epoch: 18590/20000, Loss: 0.00000004\n",
      "Epoch: 18600/20000, Loss: 0.00000004\n",
      "Epoch: 18610/20000, Loss: 0.00000004\n",
      "Epoch: 18620/20000, Loss: 0.00000004\n",
      "Epoch: 18630/20000, Loss: 0.00000004\n",
      "Epoch: 18640/20000, Loss: 0.00000004\n",
      "Epoch: 18650/20000, Loss: 0.00000005\n",
      "Epoch: 18660/20000, Loss: 0.00000018\n",
      "Epoch: 18670/20000, Loss: 0.00000010\n",
      "Epoch: 18680/20000, Loss: 0.00000005\n",
      "Epoch: 18690/20000, Loss: 0.00000005\n",
      "Epoch: 18700/20000, Loss: 0.00000004\n",
      "Epoch: 18710/20000, Loss: 0.00000004\n",
      "Epoch: 18720/20000, Loss: 0.00000004\n",
      "Epoch: 18730/20000, Loss: 0.00000004\n",
      "Epoch: 18740/20000, Loss: 0.00000004\n",
      "Epoch: 18750/20000, Loss: 0.00000004\n",
      "Epoch: 18760/20000, Loss: 0.00000004\n",
      "Epoch: 18770/20000, Loss: 0.00000004\n",
      "Epoch: 18780/20000, Loss: 0.00000013\n",
      "Epoch: 18790/20000, Loss: 0.00000007\n",
      "Epoch: 18800/20000, Loss: 0.00000005\n",
      "Epoch: 18810/20000, Loss: 0.00000004\n",
      "Epoch: 18820/20000, Loss: 0.00000004\n",
      "Epoch: 18830/20000, Loss: 0.00000004\n",
      "Epoch: 18840/20000, Loss: 0.00000004\n",
      "Epoch: 18850/20000, Loss: 0.00000010\n",
      "Epoch: 18860/20000, Loss: 0.00000004\n",
      "Epoch: 18870/20000, Loss: 0.00000004\n",
      "Epoch: 18880/20000, Loss: 0.00000004\n",
      "Epoch: 18890/20000, Loss: 0.00000004\n",
      "Epoch: 18900/20000, Loss: 0.00000004\n",
      "Epoch: 18910/20000, Loss: 0.00000004\n",
      "Epoch: 18920/20000, Loss: 0.00000004\n",
      "Epoch: 18930/20000, Loss: 0.00000004\n",
      "Epoch: 18940/20000, Loss: 0.00000004\n",
      "Epoch: 18950/20000, Loss: 0.00000017\n",
      "Epoch: 18960/20000, Loss: 0.00000012\n",
      "Epoch: 18970/20000, Loss: 0.00000004\n",
      "Epoch: 18980/20000, Loss: 0.00000005\n",
      "Epoch: 18990/20000, Loss: 0.00000004\n",
      "Epoch: 19000/20000, Loss: 0.00000004\n",
      "Epoch: 19010/20000, Loss: 0.00000004\n",
      "Epoch: 19020/20000, Loss: 0.00000003\n",
      "Epoch: 19030/20000, Loss: 0.00000004\n",
      "Epoch: 19040/20000, Loss: 0.00000020\n",
      "Epoch: 19050/20000, Loss: 0.00000007\n",
      "Epoch: 19060/20000, Loss: 0.00000004\n",
      "Epoch: 19070/20000, Loss: 0.00000004\n",
      "Epoch: 19080/20000, Loss: 0.00000003\n",
      "Epoch: 19090/20000, Loss: 0.00000004\n",
      "Epoch: 19100/20000, Loss: 0.00000003\n",
      "Epoch: 19110/20000, Loss: 0.00000003\n",
      "Epoch: 19120/20000, Loss: 0.00000003\n",
      "Epoch: 19130/20000, Loss: 0.00000003\n",
      "Epoch: 19140/20000, Loss: 0.00000003\n",
      "Epoch: 19150/20000, Loss: 0.00000003\n",
      "Epoch: 19160/20000, Loss: 0.00000005\n",
      "Epoch: 19170/20000, Loss: 0.00000018\n",
      "Epoch: 19180/20000, Loss: 0.00000004\n",
      "Epoch: 19190/20000, Loss: 0.00000005\n",
      "Epoch: 19200/20000, Loss: 0.00000004\n",
      "Epoch: 19210/20000, Loss: 0.00000003\n",
      "Epoch: 19220/20000, Loss: 0.00000003\n",
      "Epoch: 19230/20000, Loss: 0.00000003\n",
      "Epoch: 19240/20000, Loss: 0.00000004\n",
      "Epoch: 19250/20000, Loss: 0.00000014\n",
      "Epoch: 19260/20000, Loss: 0.00000007\n",
      "Epoch: 19270/20000, Loss: 0.00000005\n",
      "Epoch: 19280/20000, Loss: 0.00000003\n",
      "Epoch: 19290/20000, Loss: 0.00000003\n",
      "Epoch: 19300/20000, Loss: 0.00000003\n",
      "Epoch: 19310/20000, Loss: 0.00000003\n",
      "Epoch: 19320/20000, Loss: 0.00000003\n",
      "Epoch: 19330/20000, Loss: 0.00000003\n",
      "Epoch: 19340/20000, Loss: 0.00000003\n",
      "Epoch: 19350/20000, Loss: 0.00000003\n",
      "Epoch: 19360/20000, Loss: 0.00000003\n",
      "Epoch: 19370/20000, Loss: 0.00000011\n",
      "Epoch: 19380/20000, Loss: 0.00000006\n",
      "Epoch: 19390/20000, Loss: 0.00000006\n",
      "Epoch: 19400/20000, Loss: 0.00000004\n",
      "Epoch: 19410/20000, Loss: 0.00000004\n",
      "Epoch: 19420/20000, Loss: 0.00000004\n",
      "Epoch: 19430/20000, Loss: 0.00000005\n",
      "Epoch: 19440/20000, Loss: 0.00000007\n",
      "Epoch: 19450/20000, Loss: 0.00000004\n",
      "Epoch: 19460/20000, Loss: 0.00000003\n",
      "Epoch: 19470/20000, Loss: 0.00000003\n",
      "Epoch: 19480/20000, Loss: 0.00000003\n",
      "Epoch: 19490/20000, Loss: 0.00000003\n",
      "Epoch: 19500/20000, Loss: 0.00000003\n",
      "Epoch: 19510/20000, Loss: 0.00000005\n",
      "Epoch: 19520/20000, Loss: 0.00000008\n",
      "Epoch: 19530/20000, Loss: 0.00000005\n",
      "Epoch: 19540/20000, Loss: 0.00000004\n",
      "Epoch: 19550/20000, Loss: 0.00000004\n",
      "Epoch: 19560/20000, Loss: 0.00000004\n",
      "Epoch: 19570/20000, Loss: 0.00000006\n",
      "Epoch: 19580/20000, Loss: 0.00000003\n",
      "Epoch: 19590/20000, Loss: 0.00000004\n",
      "Epoch: 19600/20000, Loss: 0.00000003\n",
      "Epoch: 19610/20000, Loss: 0.00000004\n",
      "Epoch: 19620/20000, Loss: 0.00000008\n",
      "Epoch: 19630/20000, Loss: 0.00000003\n",
      "Epoch: 19640/20000, Loss: 0.00000004\n",
      "Epoch: 19650/20000, Loss: 0.00000013\n",
      "Epoch: 19660/20000, Loss: 0.00000006\n",
      "Epoch: 19670/20000, Loss: 0.00000005\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 19680/20000, Loss: 0.00000004\n",
      "Epoch: 19690/20000, Loss: 0.00000003\n",
      "Epoch: 19700/20000, Loss: 0.00000003\n",
      "Epoch: 19710/20000, Loss: 0.00000003\n",
      "Epoch: 19720/20000, Loss: 0.00000004\n",
      "Epoch: 19730/20000, Loss: 0.00000011\n",
      "Epoch: 19740/20000, Loss: 0.00000005\n",
      "Epoch: 19750/20000, Loss: 0.00000004\n",
      "Epoch: 19760/20000, Loss: 0.00000004\n",
      "Epoch: 19770/20000, Loss: 0.00000003\n",
      "Epoch: 19780/20000, Loss: 0.00000003\n",
      "Epoch: 19790/20000, Loss: 0.00000003\n",
      "Epoch: 19800/20000, Loss: 0.00000003\n",
      "Epoch: 19810/20000, Loss: 0.00000006\n",
      "Epoch: 19820/20000, Loss: 0.00000006\n",
      "Epoch: 19830/20000, Loss: 0.00000003\n",
      "Epoch: 19840/20000, Loss: 0.00000004\n",
      "Epoch: 19850/20000, Loss: 0.00000003\n",
      "Epoch: 19860/20000, Loss: 0.00000003\n",
      "Epoch: 19870/20000, Loss: 0.00000004\n",
      "Epoch: 19880/20000, Loss: 0.00000010\n",
      "Epoch: 19890/20000, Loss: 0.00000005\n",
      "Epoch: 19900/20000, Loss: 0.00000004\n",
      "Epoch: 19910/20000, Loss: 0.00000003\n",
      "Epoch: 19920/20000, Loss: 0.00000003\n",
      "Epoch: 19930/20000, Loss: 0.00000003\n",
      "Epoch: 19940/20000, Loss: 0.00000003\n",
      "Epoch: 19950/20000, Loss: 0.00000003\n",
      "Epoch: 19960/20000, Loss: 0.00000003\n",
      "Epoch: 19970/20000, Loss: 0.00000003\n",
      "Epoch: 19980/20000, Loss: 0.00000004\n",
      "Epoch: 19990/20000, Loss: 0.00000016\n",
      "Epoch: 20000/20000, Loss: 0.00000008\n",
      "torch.Size([20, 256])\n",
      "torch.Size([256])\n"
     ]
    },
    {
     "ename": "ValueError",
     "evalue": "x and y must have same first dimension, but have shapes (1, 256) and (256, 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "Input \u001b[0;32mIn [3]\u001b[0m, in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     61\u001b[0m final_out \u001b[38;5;241m=\u001b[39m final_time_output\u001b[38;5;241m.\u001b[39mdetach()\u001b[38;5;241m.\u001b[39mnumpy()\u001b[38;5;241m.\u001b[39mreshape(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m,\u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m     62\u001b[0m final_true \u001b[38;5;241m=\u001b[39m u[:,\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m.\u001b[39mreshape(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m,\u001b[38;5;241m1\u001b[39m)\n\u001b[0;32m---> 64\u001b[0m \u001b[43mplt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfinal_out\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     65\u001b[0m plt\u001b[38;5;241m.\u001b[39mplot(x, final_true)\n\u001b[1;32m     66\u001b[0m plt\u001b[38;5;241m.\u001b[39mshow()\n",
      "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/matplotlib/pyplot.py:2757\u001b[0m, in \u001b[0;36mplot\u001b[0;34m(scalex, scaley, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m   2755\u001b[0m \u001b[38;5;129m@_copy_docstring_and_deprecators\u001b[39m(Axes\u001b[38;5;241m.\u001b[39mplot)\n\u001b[1;32m   2756\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mplot\u001b[39m(\u001b[38;5;241m*\u001b[39margs, scalex\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, scaley\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m-> 2757\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mgca\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m   2758\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mscalex\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mscalex\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mscaley\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mscaley\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2759\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdata\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m}\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mis\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mnot\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/matplotlib/axes/_axes.py:1632\u001b[0m, in \u001b[0;36mAxes.plot\u001b[0;34m(self, scalex, scaley, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m   1390\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m   1391\u001b[0m \u001b[38;5;124;03mPlot y versus x as lines and/or markers.\u001b[39;00m\n\u001b[1;32m   1392\u001b[0m \n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m   1629\u001b[0m \u001b[38;5;124;03m(``'green'``) or hex strings (``'#008000'``).\u001b[39;00m\n\u001b[1;32m   1630\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m   1631\u001b[0m kwargs \u001b[38;5;241m=\u001b[39m cbook\u001b[38;5;241m.\u001b[39mnormalize_kwargs(kwargs, mlines\u001b[38;5;241m.\u001b[39mLine2D)\n\u001b[0;32m-> 1632\u001b[0m lines \u001b[38;5;241m=\u001b[39m [\u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_lines(\u001b[38;5;241m*\u001b[39margs, data\u001b[38;5;241m=\u001b[39mdata, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)]\n\u001b[1;32m   1633\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m line \u001b[38;5;129;01min\u001b[39;00m lines:\n\u001b[1;32m   1634\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39madd_line(line)\n",
      "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/matplotlib/axes/_base.py:312\u001b[0m, in \u001b[0;36m_process_plot_var_args.__call__\u001b[0;34m(self, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m    310\u001b[0m     this \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m args[\u001b[38;5;241m0\u001b[39m],\n\u001b[1;32m    311\u001b[0m     args \u001b[38;5;241m=\u001b[39m args[\u001b[38;5;241m1\u001b[39m:]\n\u001b[0;32m--> 312\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_plot_args\u001b[49m\u001b[43m(\u001b[49m\u001b[43mthis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m/usr/local/lib/python3.8/dist-packages/matplotlib/axes/_base.py:498\u001b[0m, in \u001b[0;36m_process_plot_var_args._plot_args\u001b[0;34m(self, tup, kwargs, return_kwargs)\u001b[0m\n\u001b[1;32m    495\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxes\u001b[38;5;241m.\u001b[39myaxis\u001b[38;5;241m.\u001b[39mupdate_units(y)\n\u001b[1;32m    497\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m x\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;241m!=\u001b[39m y\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m0\u001b[39m]:\n\u001b[0;32m--> 498\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mx and y must have same first dimension, but \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    499\u001b[0m                      \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhave shapes \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mx\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m and \u001b[39m\u001b[38;5;132;01m{\u001b[39;00my\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m    500\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m x\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m y\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m2\u001b[39m:\n\u001b[1;32m    501\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mx and y can be no greater than 2D, but have \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    502\u001b[0m                      \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mshapes \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mx\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m and \u001b[39m\u001b[38;5;132;01m{\u001b[39;00my\u001b[38;5;241m.\u001b[39mshape\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n",
      "\u001b[0;31mValueError\u001b[0m: x and y must have same first dimension, but have shapes (1, 256) and (256, 1)"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Toy problem data\n",
    "input_size = 256\n",
    "hidden_size = 32\n",
    "output_size = 256\n",
    "sequence_length = 79\n",
    "batch_size = 1\n",
    "num_epochs = 20000\n",
    "\n",
    "\n",
    "# Set random seed for reproducibility\n",
    "torch.manual_seed(42)\n",
    "\n",
    "\n",
    "\n",
    "input_data = u[:,0:79]\n",
    "target_data = u[:,1:80]\n",
    "\n",
    "test_data = u[:,79:99]\n",
    "test_target = u[:,80:100]\n",
    "\n",
    "\n",
    "# Convert data to tensors\n",
    "input_tensor = torch.tensor(input_data.T).view(batch_size, sequence_length, input_size).float()\n",
    "target_tensor = torch.tensor(target_data.T).view(batch_size, sequence_length, output_size).float()\n",
    "\n",
    "# Convert test data to tensors\n",
    "test_tensor = torch.tensor(test_data.T).view(batch_size, 20, input_size).float()\n",
    "test_target_tensor = torch.tensor(test_target.T).view(batch_size, 20, output_size).float()\n",
    "\n",
    "# Create coRNN instance\n",
    "cornn = coRNN(input_size, hidden_size, output_size, dt=0.1, gamma=1.0, epsilon=0.01)\n",
    "\n",
    "# Loss and optimizer\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = torch.optim.Adam(cornn.parameters(), lr=0.001)\n",
    "\n",
    "# Training loop\n",
    "for epoch in range(num_epochs):\n",
    "    # Forward pass\n",
    "    output = cornn(input_tensor)\n",
    "    loss = criterion(output, target_tensor)\n",
    "\n",
    "    # Backward and optimize\n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "\n",
    "    # Print progress\n",
    "    if (epoch+1) % 10 == 0:\n",
    "        print(f'Epoch: {epoch+1}/{num_epochs}, Loss: {loss.item():.8f}')\n",
    "\n",
    "\n",
    "with torch.no_grad():\n",
    "    prediction = cornn(test_tensor)\n",
    "\n",
    "print(prediction.shape)\n",
    "\n",
    "final_time_output = prediction[-1, :]\n",
    "print(final_time_output.shape)\n",
    "\n",
    "final_out = final_time_output.detach().numpy().reshape(-1,1)\n",
    "final_true = u[:,-1].reshape(-1,1)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "9db561a7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 256)\n",
      "(256, 1)\n",
      "(256, 1)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(x.shape)\n",
    "print(final_out.shape)\n",
    "print(final_true.shape)\n",
    "plt.plot(x.T, final_out)\n",
    "plt.plot(x.T, final_true)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "40b9c40c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Relative Error Test:  0.010620635887852028 %\n"
     ]
    }
   ],
   "source": [
    "# Convert NumPy arrays to PyTorch tensors\n",
    "final_out_tensor = torch.from_numpy(final_out)\n",
    "final_true_tensor = torch.from_numpy(final_true)\n",
    "\n",
    "# Compute the relative L2 error norm (generalization error)\n",
    "relative_error_test = torch.mean((final_out_tensor - final_true_tensor)**2)/ torch.mean(final_true_tensor**2)\n",
    "\n",
    "print(\"Relative Error Test: \", relative_error_test.item(), \"%\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "68dfda35",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "pytorch"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
